Compare commits

...
1262 Commits
Author SHA1 Message Date
keycloak-bot 5d80e21062 Set version to 1.9.4.Final 2016-05-09 06:29:52 +00:00
Stian Thorgersen 4494cd9ea9 Merge pull request #2811 from stianst/1.9.x
KEYCLOAK-2880 Refactor PermissionTest to not require Java8
2016-05-09 08:28:09 +02:00
Stian Thorgersen 4d3fbbaa32 KEYCLOAK-2880 Refactor PermissionTest to not require Java8 2016-05-09 07:25:39 +02:00
Marek Posolda bad3debfc3 Merge pull request #2808 from mposolda/1.9.x
KEYCLOAK-2862 AuthenticationManagementResource tests
2016-05-06 21:29:26 +02:00
mposolda b8d7c20cd6 KEYCLOAK-2862 AuthenticationManagementResource tests 2016-05-06 20:17:04 +02:00
Marek Posolda 8f28504a50 Merge pull request #2806 from vramik/KEYCLOAK-2936-1.9.x
KEYCLOAK-2936 add app.server.java.home to karaf arquillian.xsl to be able to run fu…
2016-05-06 20:06:27 +02:00
Stian Thorgersen 803ae2cdcd Merge pull request #2805 from stianst/1.9.x
Close admin client after test
2016-05-06 16:27:32 +02:00
Vlasta Ramik cc4c2622a2 add app.server.java.home to karaf arquillian.xsl to be able to run fuse tests on jdk7, minor test fix 2016-05-06 15:09:25 +02:00
Stian Thorgersen 26c6b4b624 Close admin client after test 2016-05-06 15:01:15 +02:00
Stian Thorgersen d9fe19c438 Merge pull request #2787 from stianst/1.9.x
KEYCLOAK-2865 Extend coverage of client admin endpoints
2016-05-06 11:13:29 +02:00
Marek Posolda 4c612fbde3 Merge pull request #2769 from vramik/KEYCLOAK-2936-1.9.x
KEYCLOAK-2936 Add app server module and test module for testing fuse6.3, ...
2016-05-06 08:37:28 +02:00
Stian Thorgersen 5531fab517 KEYCLOAK-2865 Extend coverage of client admin endpoints 2016-05-06 08:09:10 +02:00
Marek Posolda c50564388a Merge pull request #2800 from mposolda/1.9.x
KEYCLOAK-2805 KEYCLOAK-2777 Fuse 6.3 support
2016-05-06 08:00:20 +02:00
Stian Thorgersen 16bb58e2c6 Merge pull request #2803 from dbarentine/1.9.x
KEYCLOAK-2973 Persist federated identity on token update
2016-05-06 07:07:44 +02:00
Stian Thorgersen 631ac7bcc9 Merge pull request #2799 from abstractj/OAuthDance-1.9.x
Migration of OAuthDanceClientSessionExtensionTest
2016-05-06 07:06:25 +02:00
Stian Thorgersen e0a0d58853 Merge pull request #2797 from abstractj/RefreshTokenTest-1.9.x
Refresh token test 1.9.x
2016-05-06 07:05:38 +02:00
Stian Thorgersen 73a060adbb Merge pull request #2795 from mstruk/KEYCLOAK-2869-b
KEYCLOAK-2869 IdentityProvidersResource/IdentityProviderResource
2016-05-06 07:04:02 +02:00
Stian Thorgersen 5e699682ae Merge pull request #2793 from ssilvert/1.9.x-migrate-forms
KEYCLOAK-2906 Migrate forms package to new testsuite
2016-05-06 07:00:13 +02:00
Stian Thorgersen 6474db1e3d Merge pull request #2790 from mhajas/SAML-stability-1.9.x
KEYCLOAK-2959 KEYCLOAK-2459 Refactor and improve stability of SAML adapter tests
2016-05-06 06:58:54 +02:00
Stian Thorgersen c7787136c8 Merge pull request #2788 from stianst/KEYCLOAK-2549-1.9
KEYCLOAK-2549 Re-create master admin client if master realm is overwr…
2016-05-06 06:58:16 +02:00
Dane Barentine c02b43685f KEYCLOAK-2973 Persist federated identity on token update 2016-05-05 14:53:12 -07:00
mposolda 47def9efb3 KEYCLOAK-2805 Minor changes - cleanup and docs 2016-05-05 23:16:16 +02:00
Paolo Antinori c789510534 KEYCLOAK-2777 - Examples Fuse. Correct Parent pom reference 2016-05-05 22:10:31 +02:00
Paolo Antinori 26fee3b1c0 KEYCLOAK-2777 - Added PathBasedKeycloakConfigResolver for OSGi + examples 2016-05-05 22:10:22 +02:00
Paolo Antinori bd14f818ab KEYCLOAK-2805 - Update docs for JBoss Fuse 6.3 2016-05-05 22:10:13 +02:00
Paolo Antinori 11d91f1305 KEYCLOAK-2805 - Moved cxf.version up to the main pom 2016-05-05 22:10:03 +02:00
Paolo Antinori 473f4a0a97 KEYCLOAK-2805 - Support for JBoss Fuse 6.3
Upgrade of CXF, Jetty and Pax-Web required to rewrite part of the integration.
2016-05-05 22:09:54 +02:00
Bruno Oliveira e448b92074 Migration of OAuthDanceClientSessionExtensionTest 2016-05-05 15:30:39 -03:00
Bruno Oliveira 00456139c4 Migration of RefreshTokenTest 2016-05-05 15:21:52 -03:00
Bruno Oliveira 3746407657 Replace by ClientManager and make the code less verbose 2016-05-05 15:21:38 -03:00
Marko Strukelj 31683ce776 KEYCLOAK-2869 IdentityProvidersResource/IdentityProviderResource 2016-05-05 17:30:20 +02:00
mhajas ea238834b6 Refactor and improve stability of SAML tests 2016-05-05 12:29:02 +02:00
Marek Posolda 8b9abf551d Merge pull request #2782 from mposolda/1.9.x
Easier MariaDB support in tests
2016-05-05 10:04:41 +02:00
Stian Thorgersen 972145a0dc KEYCLOAK-2549 Re-create master admin client if master realm is overwritten on import 2016-05-05 07:20:23 +02:00
Stian Thorgersen 070d6149d1 Merge pull request #2785 from abstractj/RHSSO-121_1.9.x
RHSSO-121: Offline Tokens
2016-05-05 06:36:03 +02:00
Bruno Oliveira b021a86330 RHSSO-121: Offline Tokens 2016-05-04 22:51:59 -03:00
Stan Silvert a729aaa3bc KEYCLOAK-2906 Migrate forms package to new testsuite 2016-05-04 19:20:03 -04:00
mposolda 820c615769 Easier MariaDB support in tests 2016-05-04 22:08:58 +02:00
Stian Thorgersen 7dd1406f1b Merge pull request #2777 from stianst/1.9.x
KEYCLOAK-2880 Permissions tests for admin endpoints
2016-05-04 16:54:12 +02:00
Stian Thorgersen 095a08e208 Suppress log output from resteasy during tests 2016-05-04 13:57:40 +02:00
Stian Thorgersen d39669c00b KEYCLOAK-2880 Permissions tests for admin endpoints 2016-05-04 07:32:17 +02:00
Stian Thorgersen 31f0cc2e4b Merge pull request #2775 from mhajas/jsconsole-stability-1.9.x
KEYCLOAK-2916 Improve stability of JS-console
2016-05-04 06:35:06 +02:00
mhajas c8e0529d81 Improve stability of JS-console tests 2016-05-03 15:04:55 +02:00
keycloak-bot 6132f50d34 Set version to 1.9.4.Final-SNAPSHOT 2016-04-28 16:21:32 +00:00
keycloak-bot ea46bb0be3 Set version to 1.9.3.Final 2016-04-28 15:14:56 +00:00
Vlasta Ramik 5ba8191ff2 Add app server module and test module for testing fuse6.3, rename feature in fuse6.2 tests 2016-04-28 14:48:57 +02:00
Stian Thorgersen 7b988d267b Merge pull request #2764 from stianst/1.9.x
KEYCLOAK-2932 KEYCLOAK-2934
2016-04-28 13:50:40 +02:00
Stian Thorgersen 99372d2534 Merge pull request #2762 from mposolda/1.9.x
KEYCLOAK-2903 Document proxy-address-forwarding with reverse proxy/lo…
2016-04-28 13:11:10 +02:00
Stian Thorgersen 508bddc70a KEYCLOAK-2932 KEYCLOAK-2934 2016-04-28 13:06:41 +02:00
Stian Thorgersen 56d95b5414 Merge pull request #2760 from stianst/1.9.x
KEYCLOAK-2933
2016-04-28 13:01:57 +02:00
mposolda 71b9420286 KEYCLOAK-2903 Document proxy-address-forwarding with reverse proxy/loadbalancer setup 2016-04-28 13:01:45 +02:00
Stian Thorgersen 024d64e0e0 KEYCLOAK-2933
RealmTest is failing on WildFly
2016-04-28 12:22:10 +02:00
Stian Thorgersen e719f1af96 Merge pull request #2758 from vramik/KEYCLOAK-2928-1.9.x
KEYCLOAK-2928 Enabled/edited CustomAuthFlowCookieTest
2016-04-28 11:17:56 +02:00
Vlasta Ramik 225aab1fed Enabled/edited CustomAuthFlowCookieTest 2016-04-28 10:22:02 +02:00
Stian Thorgersen fde9e6870f Merge pull request #2757 from stianst/KEYCLOAK-2924-1.9
KEYCLOAK-2924: Fire AdminEvents on user group membership changes.
2016-04-28 10:18:09 +02:00
Thomas Darimont 90a9465caf KEYCLOAK-2924: Fire AdminEvents on user group membership changes.
We now fire AdminEvents if a user joins or leaves a group.
This information can be used to deduce potential role changes
in custom event listeners.
2016-04-28 08:38:17 +02:00
Stian Thorgersen 37a61d79a6 Merge pull request #2754 from ssilvert/1.9.x-migrate-actions
KEYCLOAK-2905 Migrate actions package from old testsuite
2016-04-28 06:44:23 +02:00
Bill Burke cb2fce74a6 Merge pull request #2756 from patriot1burke/1.9.x
add bind addresses to domain template
2016-04-27 22:09:32 -04:00
Bill Burke aaad122cff add bind addresses to domain template 2016-04-27 22:03:13 -04:00
Stan Silvert 269a2e9ba9 KEYCLOAK-2905 Migrate actions package from old testsuite 2016-04-27 14:14:16 -04:00
Bill Burke d5b86bedd6 Merge pull request #2751 from patriot1burke/1.9.x
KEYCLOAK-2922 KEYCLOAK-2920
2016-04-27 11:37:15 -04:00
Bill Burke 790f0fe7f9 Merge pull request #2749 from stianst/1.9.x
KEYCLOAK-2927 Rename add-user script to add-user-keycloak
2016-04-27 11:05:20 -04:00
Bill Burke 8417144677 Merge remote-tracking branch 'remote19/1.9.x' into b_1_9 2016-04-27 10:25:04 -04:00
Bill Burke 277f90e8b0 KEYCLOAK-2922 KEYCLOAK-2920 2016-04-27 10:23:23 -04:00
Stian Thorgersen 9306dc2015 KEYCLOAK-2927 Rename add-user script to add-user-keycloak 2016-04-27 16:17:41 +02:00
Stian Thorgersen e979b96923 Merge pull request #2736 from mhajas/adapter-ssl-1.9.x
KEYCLOAK-2915 Fix adapter ssl tests on EAP/EAP6
2016-04-27 13:50:01 +02:00
Stian Thorgersen 5a362df491 Merge pull request #2735 from vramik/KEYCLOAK-2889-1.9.x
KEYCLOAK-2889 Fix adapter tests for Karaf/Fuse
2016-04-27 13:49:30 +02:00
Stian Thorgersen 1b611fef01 Merge pull request #2746 from stianst/KEYCLOAK-2871
KEYCLOAK-2871 Extend coverage on RealmAdminResource
2016-04-27 13:38:22 +02:00
Marek Posolda 2f7d415cba Merge pull request #2742 from mposolda/1.9.x-loadbalancer
KEYCLOAK-2903 Fix WelcomeResource to not allow requests forwarded fro…
2016-04-27 11:10:48 +02:00
Stian Thorgersen 5e992f6db9 KEYCLOAK-2871 Extend coverage on RealmAdminResource 2016-04-27 10:28:02 +02:00
Marek Posolda 844da0193a Merge pull request #2744 from mposolda/1.9.x
KEYCLOAK-2898 Fix GroupMappersTest on wildfly. Clearing AssertEvents …
2016-04-26 18:01:28 +02:00
mposolda d42b44ee13 KEYCLOAK-2898 Fix GroupMappersTest on wildfly. Clearing AssertEvents events queue before test instead of after 2016-04-26 16:08:10 +02:00
mposolda c3616ecb4d KEYCLOAK-2903 Fix WelcomeResource to not allow requests forwarded from proxy/loadbalancer 2016-04-26 12:01:42 +02:00
mhajas 3a7787b1d7 Fix adapter ssl tests on EAP/EAP6 2016-04-26 09:08:35 +02:00
Stian Thorgersen 47103a040f Merge pull request #2727 from abstractj/RHSSO-106-1.9.x
RHSSO-106: Migration of ResourceOwnerPasswordCredentialsGrantTest
2016-04-25 19:46:15 +02:00
Bruno Oliveira 568140de4a RHSSO-106: Migration of ResourceOwnerPasswordCredentialsGrantTest 2016-04-25 10:15:50 -03:00
Vlasta Ramik 6d2ade5f77 Fix adapter tests for Karaf/Fuse 2016-04-25 15:10:08 +02:00
Marek Posolda 40427a2200 Merge pull request #2733 from mposolda/1.9.x
KEYCLOAK-2900
2016-04-25 15:00:12 +02:00
Stian Thorgersen bb34cfb7d6 Merge pull request #2731 from abstractj/RHSSO-130-1.9.x
RHSSO-130: AccessTokenTest migration
2016-04-25 13:43:05 +02:00
Stian Thorgersen 3fd840515b Merge pull request #2712 from ssilvert/1.9.x-migrate-LoginTest
Migrate LoginTest
2016-04-25 13:40:56 +02:00
mposolda 604a757665 KEYCLOAK-2900 2016-04-25 11:18:56 +02:00
Marek Posolda 107a3f4f11 Merge pull request #2729 from mstruk/KEYCLOAK-2899-b
KEYCLOAK-2899 Tests fail with -Pauth-server-wildfly due to missing logging dependecy
2016-04-22 21:37:54 +02:00
Bruno Oliveira f6fe53a44c RHSSO-130: AccessTokenTest migration 2016-04-22 16:32:50 -03:00
Marko Strukelj 7281c2d8ae KEYCLOAK-2899 Tests fail with -Pauth-server-wildfly due to missing logging dependecy 2016-04-22 19:50:40 +02:00
Marek Posolda bb8bc7f976 Merge pull request #2723 from mstruk/KEYCLOAK-2893-b
KEYCLOAK-2893 Fix TokenIntrospectionTest
2016-04-22 15:16:13 +02:00
Marek Posolda b4ae814567 Merge pull request #2719 from abstractj/RHSSO-108-client-auth-signed-1.9.x
Rhsso 108 client auth signed 1.9.x
2016-04-22 15:07:07 +02:00
Marek Posolda b482396af9 Merge pull request #2720 from mposolda/1.9.x
EYCLOAK
2016-04-22 15:00:49 +02:00
Marko Strukelj 9d9bf3c39b KEYCLOAK-2893 Fix TokenIntrospectionTest 2016-04-22 14:20:53 +02:00
mposolda 01fece902c KEYCLOAK-2878 Added UserFederationLdapConnectionTest 2016-04-22 13:46:58 +02:00
mposolda 663a145bd7 KEYCLOAK-2878 UserFederation mapper testing 2016-04-22 13:46:58 +02:00
Marek Posolda 2417e49f9c Merge pull request #2717 from mstruk/KEYCLOAK-2893-b
KEYCLOAK-2893 Fix TokenIntrospectionTest
2016-04-22 13:42:51 +02:00
Bruno Oliveira b053ce70f9 Inclusion of try/finally suggested by Stian 2016-04-22 08:30:15 -03:00
Bruno Oliveira a6f4588ef2 RHSSO-108: Migration of ClientAuthSignedJWTTest 2016-04-22 08:30:12 -03:00
Marko Strukelj 025df56796 KEYCLOAK-2893 Fix TokenIntrospectionTest 2016-04-22 11:19:54 +02:00
Marek Posolda f75f14141c Merge pull request #2714 from mposolda/1.9.x
UserFederation admin testing
2016-04-22 00:43:32 +02:00
mposolda f966d53f9e Simplified calling of AuthenticationManagementResource.getExecutions() 2016-04-21 22:54:27 +02:00
mposolda 2c25fd3c08 KEYCLOAK-2878 Testing of UserFederation admin REST endpoints 2016-04-21 22:54:17 +02:00
Stan Silvert e671d4429b Migrate LoginTest 2016-04-21 09:43:19 -04:00
Stian Thorgersen 95cf7bdeea Merge pull request #2708 from stianst/KEYCLOAK-2866-1.9
KEYCLOAK-2866 KEYCLOAK-2874 Test role mapping resource
2016-04-21 14:58:13 +02:00
Stian Thorgersen 7f96e0438e KEYCLOAK-2866 KEYCLOAK-2874 Test role mapping resource 2016-04-21 14:22:25 +02:00
Stian Thorgersen 82006f812a Merge pull request #2706 from stianst/KEYCLOAK-2868-1.9
KEYCLOAK-2868 Extend coverage of GroupResource tests
2016-04-21 13:38:16 +02:00
Stian Thorgersen 951fb095fc Merge pull request #2703 from stianst/KEYCLOAK-2838-1.9
KEYCLOAK-2838: Add cookie storage fallback to keycloak.js
2016-04-21 13:37:48 +02:00
Stian Thorgersen 06c1f0a7e9 KEYCLOAK-2868 Extend coverage of GroupResource tests 2016-04-21 11:52:04 +02:00
Stian Thorgersen 4445989f85 Merge pull request #2702 from stianst/KEYCLOAK-2873-1.9
KEYCLOAK-2873 / KEYCLOAK-2875 Test RoleContainerResource
2016-04-21 11:47:46 +02:00
Maximilian Szengel c1156bb053 KEYCLOAK-2838: Add cookie storage fallback to keycloak.js 2016-04-21 11:10:18 +02:00
Stian Thorgersen fc1a7908d6 KEYCLOAK-2873 / KEYCLOAK-2875 Test RoleContainerResource 2016-04-21 10:59:45 +02:00
Stian Thorgersen 70d427acea Merge pull request #2699 from stianst/KEYCLOAK-2864-1.9
KEYCLOAK-2864 Test InitialAccessTokenResource
2016-04-21 10:27:13 +02:00
Stian Thorgersen d299ae9af5 KEYCLOAK-2864 Test InitialAccessTokenResource 2016-04-21 09:44:59 +02:00
Stian Thorgersen f79d7a65fd Merge pull request #2698 from stianst/KEYCLOAK-2872-1.9
KEYCLOAK-2872 Test RoleByIdResource
2016-04-21 09:31:45 +02:00
Stian Thorgersen cff654b784 KEYCLOAK-2872 Test RoleByIdResource 2016-04-21 07:10:25 +02:00
Stian Thorgersen bdbd765e7e Merge pull request #2693 from abstractj/RHSSO-108-1.9.x
RHSSO-108: Client signed token authentication
2016-04-21 06:19:20 +02:00
Stian Thorgersen 61bb2ee660 Merge pull request #2695 from stianst/1.9.x
Ignore failing CustomAuthFlowCookieTest
2016-04-21 06:07:20 +02:00
Stian Thorgersen 2472eef714 Ignore failing CustomAuthFlowCookieTest 2016-04-21 06:06:14 +02:00
Bruno Oliveira 51c87609ae RHSSO-108: Client signed token authentication 2016-04-20 20:47:09 -03:00
Stian Thorgersen 33c8ced3e9 Merge pull request #2691 from stianst/role-assertevents-1.9
Made AssertEvents work with @Rule
2016-04-20 21:44:42 +02:00
Stian Thorgersen 94f1e43be7 Merge pull request #2692 from stianst/KEYCLOAK-2835-1.9
[KEYCLOAK-2835] - Adding SOAP binding to the list of supported Single…
2016-04-20 20:16:26 +02:00
Pedro Igor 13e09d2341 [KEYCLOAK-2835] - Adding SOAP binding to the list of supported SingleSignOnService. 2016-04-20 20:15:30 +02:00
Stian Thorgersen d3fc34752e Made AssertEvents work with @Rule 2016-04-20 20:11:02 +02:00
Stian Thorgersen f8ddecdf2f Merge pull request #2689 from ssilvert/1.9.x
Rename oauthClient to oauth in AbstractKeycloakTst
2016-04-20 19:41:00 +02:00
Stian Thorgersen 53a7025784 Merge pull request #2686 from mposolda/1.9.x
KEYCLOAK-2842 Not possible to add new execution under registration flow
2016-04-20 19:40:41 +02:00
Stian Thorgersen 4f07522953 Merge pull request #2685 from mstruk/assert-events-refactor-b
KEYCLOAK-2755 Refactor testsuite events provider
2016-04-20 19:37:01 +02:00
Stian Thorgersen ad0c9adc03 Merge pull request #2682 from stianst/KEYCLOAK-2861
KEYCLOAK-2861 Test AttackDetectionResource
2016-04-20 19:36:08 +02:00
Stan Silvert 16390ee4b6 Rename oauthClient to oauth in AbstractKeycloakTst 2016-04-20 12:40:10 -04:00
mposolda ec8eee02fe KEYCLOAK-2842 Not possible to add new execution under registration flow 2016-04-20 18:36:35 +02:00
Marko Strukelj db85f77b00 KEYCLOAK-2755 Refactor testsuite events provider 2016-04-20 16:46:42 +02:00
Stian Thorgersen 433fe5944c KEYCLOAK-2861 Test AttackDetectionResource 2016-04-20 16:20:38 +02:00
Stian Thorgersen fb476e5022 Merge pull request #2681 from stianst/KEYCLOAK-2850-1.9
Moved admin tests from endpoint package back to admin package
2016-04-20 15:35:52 +02:00
Stian Thorgersen 29113b9398 Moved admin tests from endpoint package back to admin package 2016-04-20 14:57:15 +02:00
Stian Thorgersen fc0c8e898d Merge pull request #2678 from stianst/KEYCLOAK-2850-1.9
KEYCLOAK-2850 Migrated ImpersonationTest and added builders
2016-04-20 14:48:07 +02:00
Marek Posolda fca9122052 Merge pull request #2676 from mposolda/1.9.x
Client template fixes
2016-04-20 14:13:51 +02:00
Stian Thorgersen f1e5cbf8fc KEYCLOAK-2850 Migrated ImpersonationTest and added builders 2016-04-20 13:52:32 +02:00
mposolda 2a6b25b840 KEYCLOAK-2846 export/import of clientTemplate scopes 2016-04-20 13:22:40 +02:00
mposolda 1c9f4cfb5c KEYCLOAK-2844 Unexpected error when trying to remove clientTemplate in use 2016-04-20 13:20:48 +02:00
Stian Thorgersen 4c7c2a4cd3 Merge pull request #2674 from stianst/1.9.x
KEYCLOAK-2850 Migrated ConcurrencyTest
2016-04-20 12:50:06 +02:00
Stian Thorgersen 110c142a53 Merge pull request #2672 from stianst/KEYCLOAK-2491-1.9
KEYCLOAK-2491 Fix permissions in admin console to match permissions i…
2016-04-20 12:49:31 +02:00
Stian Thorgersen 8c8f2019e9 KEYCLOAK-2850 Migrated ConcurrencyTest 2016-04-20 10:07:49 +02:00
Stian Thorgersen e5557e0cde KEYCLOAK-2491 Fix permissions in admin console to match permissions in admin endpoints 2016-04-20 09:57:31 +02:00
Marek Posolda f4f7488d8a Merge pull request #2669 from mposolda/1.9.x
KEYCLOAK-2850 Migrate RealmTest from old testsuite to new
2016-04-20 09:33:50 +02:00
Stian Thorgersen 7ea27e7c28 Merge pull request #2668 from stianst/KEYCLOAK-2832-1.9
KEYCLOAK-2832
2016-04-20 09:10:51 +02:00
mposolda b14b384777 Remove AbstractAdminTest.assertNames and related methods (as they are available in Assert class) 2016-04-20 08:04:40 +02:00
mposolda 7c284dc843 KEYCLOAK-2850 migrate RealmTest from old testsuite to new 2016-04-20 08:04:40 +02:00
Stian Thorgersen 320e81f11b KEYCLOAK-2832
Authentication failure logs at ERROR level
2016-04-20 07:32:33 +02:00
Stian Thorgersen 350f45ef76 Merge pull request #2650 from mhajas/truststore.1.9.x
KEYCLOAK-2841 Trustore support in adapter tests
2016-04-20 06:56:58 +02:00
Stian Thorgersen 20f7b444bb Merge pull request #2665 from stianst/1.9.x
Migrate pages from old testsuite, make OAuthClient injectable
2016-04-19 22:08:50 +02:00
Stian Thorgersen 3da4b3a6d3 Removed duplicated ClientInitialAccessTest 2016-04-19 20:34:47 +02:00
Stian Thorgersen 37a9f88983 Merge pull request #2663 from vmuzikar/1.9.x
KEYCLOAK-2854 Fix Client Settings Console UI test
2016-04-19 20:32:06 +02:00
Stian Thorgersen d4c82dbd72 Merge pull request #2660 from abstractj/apiutil-removal-1.9.x
Removal of duplicated API Util
2016-04-19 20:31:10 +02:00
Stian Thorgersen 85e2b5eea0 Merge pull request #2647 from tkyjovsk/performance-tests-1.9.x
Added module 'adapters/jboss/remote' with performance tests. 1.9.x
2016-04-19 20:30:23 +02:00
Stian Thorgersen e6cf4afc29 Migrate pages from old testsuite, make OAuthClient injectable 2016-04-19 20:18:09 +02:00
Vaclav Muzikar 26ba12962c KEYCLOAK-2854 Fix Client Settings Console UI test 2016-04-19 18:04:57 +02:00
Marek Posolda e963344f87 Merge pull request #2657 from stianst/KEYCLOAK-2850-1.9
KEYCLOAK-2850 Migrate admin endpoint identity provider test
2016-04-19 16:24:49 +02:00
Bruno Oliveira daf8658568 Removal of duplicated API Util 2016-04-19 10:22:26 -03:00
Marek Posolda 38394a6949 Merge pull request #2655 from mposolda/1.9.x
KEYCLOAK-2849 Admin endpoint tests for client templates
2016-04-19 15:22:14 +02:00
mposolda af34927930 KEYCLOAK-2849 Admin endpoint tests for client templates 2016-04-19 14:36:30 +02:00
Stian Thorgersen fe4fbfca30 KEYCLOAK-2850 Migrate admin endpoint identity provider test 2016-04-19 14:27:53 +02:00
Stian Thorgersen 28de85f8f9 Merge pull request #2653 from stianst/KEYCLOAK-2828-1.9.x
KEYCLOAK-2828
2016-04-19 13:44:12 +02:00
Stian Thorgersen 91817ea333 KEYCLOAK-2828 Refactor contribution and add tests 2016-04-19 13:09:35 +02:00
Thomas Raehalme c285fc1cf7 KEYCLOAK-2828: LoginStatusIframeEndpoint now sets the P3P header.
IE requires a P3P header to be present in <iframe /> response. Otherwise
cookies are forbidden. The value of the header does not seem to matter.
2016-04-19 10:27:17 +02:00
Marek Posolda 45173f4063 Merge pull request #2648 from pdrozd/1.9.x
KEYCLOAK-2839 - kerberos tests migration.
2016-04-18 20:05:33 +02:00
mhajas c4271b30e9 Trustore support in adapter tests + fix tests 2016-04-18 16:12:58 +02:00
Tomas Kyjovsky c7205fa43d Updated version fo adapters/jboss/remote/pom.xml to 1.9.3-Final-SNAPSHOT. 2016-04-18 14:27:14 +02:00
Pavel Drozd 5ac65413f2 KEYCLOAK-2839 - kerberos tests migration. 2016-04-18 14:27:12 +02:00
Tomas Kyjovsky 848c234e06 Added module 'adapters/jboss/remote' with performance tests. 2016-04-18 14:25:13 +02:00
Stian Thorgersen 1b987ff2a5 Merge pull request #2636 from ssilvert/1.9.x-migrate-oauth-client-2
KEYCLOAK-2743: Port OAuthClient to new testsuite
2016-04-18 07:35:09 +02:00
Bill Burke 8c0c80f6af Merge pull request #2645 from patriot1burke/1.9.x
KEYCLOAK-2740
2016-04-15 17:29:46 -04:00
Bill Burke 8d3d80e603 KEYCLOAK-2740 2016-04-15 16:48:38 -04:00
Bill Burke 3df22af3f0 Merge pull request #2606 from vramik/KEYCLOAK-2757-1.9.x
KEYCLOAK-2757 Add tests to cover custom auth flows
2016-04-15 16:27:56 -04:00
Bill Burke 199198ecb5 Merge pull request #2642 from patriot1burke/1.9.x
KEYCLOAK-2584
2016-04-15 16:27:34 -04:00
Bill Burke 6180132486 KEYCLOAK-2584 2016-04-15 15:14:43 -04:00
Bill Burke 7731e74c38 KEYCLOAK-2584 2016-04-15 15:09:42 -04:00
Stan Silvert 15f75a36b5 Move test under 'endpoint' package. 2016-04-15 08:12:58 -04:00
Stan Silvert 37eddc23fd Create TestRealmKeycloakTest as common base class for tests that need
testrealm.json.  Rename admin packaget to endpoint.  Rename legacy package
to match old testsuite.
test suite.
2016-04-15 08:12:22 -04:00
Stan Silvert 7099dc3e51 KEYCLOAK-2743: Port OAuthClient to new testsuite 2016-04-15 08:11:54 -04:00
keycloak-bot cf1c7a319a Set version to 1.9.3.Final-SNAPSHOT 2016-04-14 14:07:48 +00:00
keycloak-bot eb68ef47b1 Set version to 1.9.2.Final 2016-04-14 13:33:01 +00:00
Stian Thorgersen 7f7fb23f32 Merge pull request #2633 from stianst/1.9.x
KEYCLOAK-2825 KEYCLOAK-2826 Remove private for org.keycloak.keycloak-…
2016-04-14 15:30:10 +02:00
Stian Thorgersen 846bc2ca35 KEYCLOAK-2827 ModuleLoadError: org.keycloak.keycloak-core-public:main 2016-04-14 15:21:58 +02:00
Stian Thorgersen ed77589a43 KEYCLOAK-2825 KEYCLOAK-2826 Remove private for org.keycloak.keycloak-adapter-core and org.keycloak.keycloak-adapter-spi modules 2016-04-14 14:40:05 +02:00
Marek Posolda 6ab94ce4e8 Merge pull request #2629 from mposolda/1.9.x
KEYCLOAK-2823 Password policy 'hashAlgorithm' value not correctly sho…
2016-04-14 13:56:06 +02:00
mposolda a5179907ad KEYCLOAK-2823 Password policy 'hashAlgorithm' value not correctly shown in admin console 2016-04-14 13:15:23 +02:00
Marek Posolda 77bbf2afb5 Merge pull request #2626 from mposolda/1.9.x
Migration and mongo fix
2016-04-14 11:48:13 +02:00
mposolda 85b95c5432 KEYCLOAK-2820 Mongo doesn't start on wildfly 2016-04-14 10:41:31 +02:00
mposolda 613a26cd1c KEYCLOAK-2819 Fix realm security header setup after migration 2016-04-14 10:22:14 +02:00
Stian Thorgersen 18cc0fdaf3 Merge pull request #2625 from stianst/1.9.x
KEYCLOAK-2818
2016-04-14 09:14:33 +02:00
Stian Thorgersen 39c0dfeb8f KEYCLOAK-2818
Fix poms not updated by versions plugin
2016-04-14 08:17:05 +02:00
Stian Thorgersen 524ae68224 Fix to cors-example-fix 2016-04-14 07:10:50 +02:00
Bruno Oliveira e63726d51c Fix the broken logout URL 2016-04-14 07:10:33 +02:00
Bruno Oliveira 29c839602f Make the client URL match exactly the same configured at the realm 2016-04-14 07:10:33 +02:00
Stian Thorgersen 1e20cad2ae Merge pull request #2616 from abstractj/minor-fix
There's no such profile for this example
2016-04-14 07:02:47 +02:00
Stian Thorgersen 7feeca8273 Merge pull request #2615 from abstractj/cordova
inappbrowser plugin returns 404 with the current namespace
2016-04-14 06:59:54 +02:00
Bill Burke 9c8d9ceb28 Merge pull request #2622 from patriot1burke/1.9.x
merge adapter-spi and adapter-spi-public
2016-04-13 22:52:22 -04:00
Bill Burke 07a7035398 merge adapter-spi and adapter-spi-public 2016-04-13 22:18:26 -04:00
Stian Thorgersen 6c2f8a8f65 Merge pull request #2612 from abstractj/angular2-example
Example points to wrong KC version
2016-04-13 19:35:06 +02:00
Bruno Oliveira d1bf3c3be6 There's no such profile for this example 2016-04-13 14:10:22 -03:00
Bruno Oliveira edef864ffc inappbrowser plugin returns 404 with the current namespace 2016-04-13 14:05:45 -03:00
Marek Posolda 3effc265c4 Merge pull request #2610 from mposolda/1.9.x
KEYCLOAK-2812 Make testsuite-arquillian working with -Pauth-server-wi…
2016-04-13 16:41:22 +02:00
Bruno Oliveira 41775bf8ef Example points to wrong KC version 2016-04-13 11:07:48 -03:00
mposolda 6c2464e399 KEYCLOAK-2812 Make testsuite-arquillian working with -Pauth-server-wildfly 2016-04-13 16:04:20 +02:00
Marek Posolda 17a7d04de9 Merge pull request #2609 from mposolda/1.9.x
KEYCLOAK-2811 FederationProvidersIntegrationTest.testReadOnly failing…
2016-04-13 13:50:07 +02:00
mposolda b630c5b447 KEYCLOAK-2811 FederationProvidersIntegrationTest.testReadOnly failing on MSAD 2016-04-13 12:40:10 +02:00
Marek Posolda ab69b98766 Merge pull request #2605 from mposolda/1.9.x
KEYCLOAK-2809 NPE when removing role, which is in scope of some Clien…
2016-04-13 12:39:07 +02:00
Vlasta Ramik 41ac0f3b04 Add tests to cover custom auth flows 2016-04-13 12:08:03 +02:00
Stian Thorgersen d78450137e Merge pull request #2603 from stianst/KEYCLOAK-2810-1.9
KEYCLOAK-2810 Added robots.txt and robots meta header
2016-04-13 11:58:23 +02:00
mposolda 1e47e28f20 KEYCLOAK-2809 NPE when removing role, which is in scope of some ClientTemplate 2016-04-13 11:48:04 +02:00
Stian Thorgersen 80a8961878 KEYCLOAK-2810 Added robots.txt and robots meta header 2016-04-13 11:24:19 +02:00
Marek Posolda 95d555ef39 Merge pull request #2598 from mposolda/1.9.x
Fix testsuite with Mongo
2016-04-13 11:06:49 +02:00
Stian Thorgersen 1a8f56f3d1 Merge pull request #2601 from stianst/KEYCLOAK-2804-1.9
KEYCLOAK-2804 Prevent browser from prefilling username/password into …
2016-04-13 10:39:48 +02:00
Stian Thorgersen 4e1059740a KEYCLOAK-2804 Prevent browser from prefilling username/password into non-login form 2016-04-13 10:01:44 +02:00
mposolda 7e225d60fd Fix testsuite with Mongo 2016-04-13 09:54:36 +02:00
Bill Burke b55449b739 Merge pull request #2597 from patriot1burke/1.9.x
KEYCLOAK-2790
2016-04-12 19:45:22 -04:00
Bill Burke 5b298cf43c KEYCLOAK-2790 2016-04-12 18:25:01 -04:00
Bill Burke b56fe48277 Merge pull request #2586 from mhajas/secureDeployment-1.9.x-PR
KEYCLOAK-2199 Add tests for secure deployment
2016-04-12 17:53:34 -04:00
Bill Burke 4c438de595 Merge pull request #2568 from cpitman/proxy-headers-1.9
KEYCLOAK-2791 - Proxy handling for X-Forwarded headers
2016-04-12 17:53:07 -04:00
Bill Burke ea006f1d77 Merge pull request #2588 from vramik/KEYCLOAK-2794-1.9.x
KEYCLOAK-2794 Change undertow-embedded version
2016-04-12 17:52:39 -04:00
Bill Burke cb4e0a9e75 Merge pull request #2595 from patriot1burke/1.9.x
public private api
2016-04-12 17:51:49 -04:00
Bill Burke 7df32ba4cd public/private fixes 2016-04-12 15:19:31 -04:00
Bill Burke 89098b3726 Merge remote-tracking branch 'remote19/1.9.x' into b_1_9 2016-04-12 12:10:04 -04:00
Bill Burke 9e45c2ac4d public/private modules 2016-04-12 12:09:46 -04:00
Stian Thorgersen d4f8f833a2 Merge pull request #2592 from stianst/KEYCLOAK-2807-1.9
KEYCLOAK-2807 Fix server info providers page
2016-04-12 16:18:20 +02:00
Stian Thorgersen e159254cd2 KEYCLOAK-2807 Fix server info providers page 2016-04-12 15:40:22 +02:00
Stian Thorgersen ee090149b9 Merge pull request #2590 from stianst/KEYCLOAK-2799-1.9
KEYCLOAK-2799 Show error for identity brokering login if user is disa…
2016-04-12 14:11:21 +02:00
Stian Thorgersen a22c8c1d8e KEYCLOAK-2799 Show error for identity brokering login if user is disabled 2016-04-12 13:15:21 +02:00
Stian Thorgersen 83ff45ce04 Merge pull request #2584 from stianst/KEYCLOAK-2803-1.9
KEYCLOAK-2803 Fix failure to add execution to client flow
2016-04-12 13:05:07 +02:00
Vlasta Ramik 815e650448 Change undertow-embedded version from snapshot to released version 1.0.0.Alpha2 2016-04-12 09:48:20 +02:00
mhajas 777bdc908f Add tests for secure deployment 2016-04-12 09:16:28 +02:00
Stian Thorgersen 45231b69a7 KEYCLOAK-2803 Fix failure to add execution to client flow 2016-04-12 08:04:54 +02:00
Stian Thorgersen b01f522ace Merge pull request #2582 from stianst/KEYCLOAK-2770-1.9
KEYCLOAK-2770 Close mail transport after sending message
2016-04-12 07:43:58 +02:00
Stian Thorgersen e840766b1f Merge pull request #2571 from pdrozd/1.9.x
KEYCLOAK-2794 - changed version of undertow-embedded.
2016-04-12 07:42:10 +02:00
Stian Thorgersen 4298916013 Merge pull request #2574 from stianst/KEYCLOAK-2700-1.9
KEYCLOAK-2700 Import existing realm fails due to can't delete group
2016-04-12 07:20:03 +02:00
Stian Thorgersen 788bdfb29b KEYCLOAK-2770 Close mail transport after sending message 2016-04-12 07:07:53 +02:00
Marek Posolda 3ec8672a75 Merge pull request #2580 from mposolda/1.9.x
Identity brokering error handling fixes
2016-04-12 00:08:55 +02:00
mposolda fc95067193 KEYCLOAK-2802 NPE during identity broker cancelled from account mgmt 2016-04-11 23:28:59 +02:00
mposolda d14867f785 KEYCLOAK-2801 Redirected to login theme error page after failed social linking from account management 2016-04-11 22:51:05 +02:00
Marek Posolda ffe483ae2d Merge pull request #2578 from mposolda/1.9.x
KEYCLOAK-2769 Better error handling of expired code in IdentityBroker…
2016-04-11 18:56:32 +02:00
mposolda dc2d71489d KEYCLOAK-2769 Better error handling of expired code in IdentityBrokerService 2016-04-11 18:08:10 +02:00
Marek Posolda 42402ee6f4 Merge pull request #2576 from mposolda/1.9.x
KEYCLOAK-2795 Testsuite fails sometimes with NPE in LockServiceFactor…
2016-04-11 10:50:59 +02:00
mposolda f4f95cd096 KEYCLOAK-2795 Testsuite fails sometimes with NPE in LockServiceFactory.getLockService 2016-04-11 10:08:26 +02:00
Stian Thorgersen dafea0cad6 KEYCLOAK-2700 Import existing realm fails due to can't delete group 2016-04-11 09:19:20 +02:00
Stian Thorgersen b5fe63af22 Merge pull request #2570 from stianst/KEYCLOAK-2766-1.9
KEYCLOAK-2766 Add missing id to AuthenticatorConfigRepresentation
2016-04-11 08:35:34 +02:00
Pavel Drozd a48ace4d70 KEYCLOAK-2794 - changed version of undertow-embedded. 2016-04-11 08:34:54 +02:00
Stian Thorgersen 5440688dd9 KEYCLOAK-2766 Add missing id to AuthenticatorConfigRepresentation 2016-04-11 07:43:45 +02:00
Stian Thorgersen b21b548b9c Merge pull request #2560 from vramik/KEYCLOAK-2783
KEYCLOAK-2783 added nexus-staging-maven-plugin
2016-04-11 07:14:50 +02:00
Stian Thorgersen fe44483e60 Merge pull request #2563 from guusdk/1.9.x
KEYCLOAK-2785: Admin client should be able to delete a user.
2016-04-11 07:14:13 +02:00
Stian Thorgersen 12be32f6dc Merge pull request #2559 from mhajas/js-console-stability-1.9.x-PR
KEYCLOAK-2780 Better stability in JSConsole test
2016-04-11 07:12:27 +02:00
Stian Thorgersen 524080b0ae Merge pull request #2557 from mhajas/secure-portal-1.9.x-PR
KEYCLOAK-2779 Fix DemoServletAdpater tests
2016-04-11 07:10:57 +02:00
Stian Thorgersen d8dfc1ca0b Merge pull request #2555 from mhajas/eap6URLs-1.9.x-PR
KEYCLOAK-2778 Fix urls on eap6
2016-04-11 07:09:57 +02:00
Chris Pitman bee7c077b7 KEYCLOAK-2791 - Proxy handling for X-Forwarded headers 2016-04-09 02:22:15 -04:00
Marek Posolda a3abc0296d Merge pull request #2566 from mposolda/1.9.x
KEYCLOAK-2769 Fix NPE during 'Identity Broker cancelled' and instead …
2016-04-08 22:14:22 +02:00
mposolda 2d3580e2d4 KEYCLOAK-2769 Fix NPE during 'Identity Broker cancelled' and instead show keycloak 'we are sorry' page 2016-04-08 19:19:52 +02:00
Guus der Kinderen 3c5fcebce9 KEYCLOAK-2785: Admin client should be able to delete a user.
The delete user service should be exposed in the admin client.
2016-04-08 16:36:54 +02:00
Vlasta Ramik 00bb2de032 added nexus-staging-maven-plugin 2016-04-08 15:37:21 +02:00
mhajas 013af68d74 Better stability in JSConsole test 2016-04-08 13:57:57 +02:00
mhajas 8209c74918 Fix DemoServlet test 2016-04-08 13:50:16 +02:00
mhajas 4ed2c4e5a8 Fix timeouts in DemoServlets tests 2016-04-08 13:50:03 +02:00
mhajas 34e125ea80 Fix urls on eap6 2016-04-08 13:31:08 +02:00
Marek Posolda 135071b3aa Merge pull request #2552 from mposolda/1.9.x
KEYCLOAK-2614 Refactor database lock to use 'SELECT FOR UPDATE' pessi…
2016-04-08 13:18:43 +02:00
mposolda 38952e5b3d KEYCLOAK-2614 Refactor database lock to use 'SELECT FOR UPDATE' pessimistic locking 2016-04-08 11:48:43 +02:00
Stian Thorgersen 3eefe2438b Merge pull request #2550 from stianst/KEYCLOAK-2683-1.9
KEYCLOAK-2683 Remove QRCodeResource and embed QR code in image
2016-04-08 09:53:24 +02:00
Stian Thorgersen faaf20de95 KEYCLOAK-2683 Remove QRCodeResource and embed QR code in image 2016-04-08 09:01:28 +02:00
Stian Thorgersen 7d5cedc6eb Merge pull request #2549 from stianst/1.9.x
KEYCLOAK-2774
2016-04-08 07:00:45 +02:00
Stian Thorgersen 51efc3c184 KEYCLOAK-2774
Adapters logout section points to removed tokens endpoint
2016-04-08 07:00:32 +02:00
Stian Thorgersen cddba23dcf Merge pull request #2545 from vmuzikar/1.9.x
KEYCLOAK-2772 Add deletion test to GroupTest
2016-04-08 06:51:36 +02:00
Stian Thorgersen 5c693246ba Merge pull request #2542 from stianst/KEYCLOAK-2646-1.9
KEYCLOAK-2646 Admin console shows 'Page not found' after password reset
2016-04-07 19:36:58 +02:00
Stian Thorgersen ae0aa61b3c Merge pull request #2547 from stianst/1.9.x
Revert accidentally removed ResteasyClient configuration in admin
2016-04-07 19:36:49 +02:00
Konstantin Gribov 1cf10f1f11 Revert accidentally removed ResteasyClient configuration in admin
Fixes accidentally removed in PR #2449 ResteasyClient pool size parameter in
`org.keycloak.admin.client.Keycloak`.
2016-04-07 19:36:25 +02:00
Vaclav Muzikar b576703533 KEYCLOAK-2772 Add deletion test to GroupTest 2016-04-07 18:05:12 +02:00
Stian Thorgersen 850de683db Merge pull request #2541 from stianst/admin-client-prs-1.9
Add service account support to Keycloak admin client
2016-04-07 16:53:01 +02:00
Stian Thorgersen 59fd461563 Merge pull request #2537 from stianst/KEYCLOAK-2751-1.9
KEYCLOAK-2751
2016-04-07 16:27:09 +02:00
Stian Thorgersen ddd93df503 KEYCLOAK-2646 Admin console shows 'Page not found' after password reset 2016-04-07 16:23:34 +02:00
Konstantin Gribov 74f98f9eb2 Add service account support to Keycloak admin client
Added grant_type=client_credentials support to keycloak-admin-client
so `keycloak-admin-client` can be used with service client account.

Fixes #KEYCLOAK-2236
2016-04-07 15:45:48 +02:00
Stian Thorgersen b32d50df2d Merge pull request #2540 from guusdk/1.9.x
KEYCLOAK-2767: Should return a primitive if possible.
2016-04-07 15:41:36 +02:00
Stian Thorgersen 61d1c498ef KEYCLOAK-2751
Separate HTTP status codes for REST API errors
2016-04-07 15:39:55 +02:00
Guus der Kinderen 7bbc618e1b KEYCLOAK-2767: Should return a primitive if possible.
A JSON primitive is valid JSON. There is no need to construct a JSON object
just for the sake of being JSON complient. This keeps things nice and simple.
2016-04-07 13:59:17 +02:00
Stian Thorgersen 865371b58f Merge pull request #2536 from stianst/1.9.x
KEYCLOAK-2763
2016-04-07 09:37:36 +02:00
Stian Thorgersen 16b1f88546 KEYCLOAK-2763
Document requirement to use a secure private network for clustering
2016-04-07 09:37:17 +02:00
Stian Thorgersen 0f43e2b6f2 Merge pull request #2533 from stianst/KEYCLOAK-2762-1.9
KEYCLOAK-2762 Renaming a realm without saving the form affects all li…
2016-04-07 09:34:38 +02:00
Stian Thorgersen 949ecf60d9 Merge pull request #2534 from stianst/admin-client-prs-1.9
Add admin client PRs from master
2016-04-07 09:06:59 +02:00
Guus der Kinderen 0024162121 KEYCLOAK-2731: Improve thread safety of TokenManager
This commit guards access to the non-final fields of TokenManager by its intrinsic lock.
2016-04-07 07:36:36 +02:00
Guus der Kinderen 958471b081 KEYCLOAK-2746: By default, allow for concurrent usage
The nature of Keycloak makes it very plausible that it is used in
a concurrent setting. With that in mind, it would make sense to,
by default, allow for more than one concurrent Resteasy connection
in the admin client code.
2016-04-07 07:35:53 +02:00
Guus der Kinderen de80133ea2 KEYCLOAK-2726: Invalidate token upon failure
When a token managed by TokenManager is known to be invalid, it should no
longer be used. This commit adds a response listener to the only filter
using TokenManager, which causes, upon authentication failure, to
invalidate the token that was used.
2016-04-07 07:24:21 +02:00
Guus der Kinderen 13104750f6 KEYCLOAK-2721: Do not recreate TokenService proxy
By re-using the service proxy, classloading issues can be prevented.
2016-04-07 07:20:58 +02:00
Stian Thorgersen 2f575af3d2 Merge pull request #2531 from stianst/KEYCLOAK-2761-1.9
KEYCLOAK-2761 Broken on/off switch at Client Mappers with specific wi…
2016-04-07 07:13:37 +02:00
Stian Thorgersen 56f99ed640 KEYCLOAK-2762 Renaming a realm without saving the form affects all links in Console 2016-04-07 06:59:48 +02:00
Stian Thorgersen a42e7f226f Merge pull request #2529 from stianst/KEYCLOAK-2760-1.9
KEYCLOAK-2760
2016-04-07 06:51:26 +02:00
Stian Thorgersen d6e513f6c3 Merge pull request #2526 from stianst/KEYCLOAK-2759-1.9
KEYCLOAK-2759 Fix error message when renaming realm to name that exists
2016-04-07 06:50:52 +02:00
Stian Thorgersen 1500fff93e Merge pull request #2525 from stianst/KEYCLOAK-2758-1.9
KEYCLOAK-2758
2016-04-07 06:50:07 +02:00
Stian Thorgersen c37437e82b KEYCLOAK-2761 Broken on/off switch at Client Mappers with specific window width 2016-04-07 06:19:48 +02:00
Stian Thorgersen 7d0bb05aaa KEYCLOAK-2760
Cannot delete a client template mapper with a little trash icon in heading
2016-04-07 06:07:32 +02:00
Stian Thorgersen 35297a149d KEYCLOAK-2759 Fix error message when renaming realm to name that exists 2016-04-07 06:00:57 +02:00
Stian Thorgersen e68b71ba01 KEYCLOAK-2758
Weird behavior of add/remove button for 'Valid Redirect URIs' in a client settings form
2016-04-07 05:43:36 +02:00
Stian Thorgersen 900be13423 Merge pull request #2521 from stianst/KEYCLOAK-2756-1.9
KEYCLOAK-2756
2016-04-06 19:25:56 +02:00
Stian Thorgersen 02b8cc7ad3 KEYCLOAK-2756
Renaming a realm breaks down the Clients
2016-04-06 15:19:36 +02:00
Marek Posolda 0371c53d07 Merge pull request #2516 from mposolda/1.9.x
KEYCLOAK-1982 Some builtin objects might be missing when import JSON exported from previous versions
2016-04-06 13:24:29 +02:00
Stian Thorgersen 364a54f792 Merge pull request #2518 from stianst/1.9.x
KEYCLOAK-2752
2016-04-06 13:19:30 +02:00
Stian Thorgersen 0016bd8744 KEYCLOAK-2752
Update documentation re directory for providers
2016-04-06 13:18:56 +02:00
Stian Thorgersen 36baf38d09 Merge pull request #2515 from stianst/KEYCLOAK-2590-1.9
KEYCLOAK-2590 Add custom rest endpoint to set time offset
2016-04-06 12:58:18 +02:00
mposolda 437244f61e KEYCLOAK-1982 Some builtin objects might be missing when import JSON exported from old versions 2016-04-06 11:36:42 +02:00
mposolda 70c85af7e2 Ensure KeycloakSessionFactory.close is called before shutdown of auth-server-undertow 2016-04-06 11:36:42 +02:00
mposolda d97dbdac36 KEYCLOAK-2737 Handle the databaseSchema: 'validate' against empty database 2016-04-06 11:36:41 +02:00
Stian Thorgersen 89013c8f6e KEYCLOAK-2590 Add custom rest endpoint to set time offset 2016-04-06 11:16:28 +02:00
Stian Thorgersen ff80f613d3 Merge pull request #2513 from stianst/KEYCLOAK-2262-1.9
KEYCLOAK-2262
2016-04-06 11:12:04 +02:00
Stian Thorgersen 15cbddba13 KEYCLOAK-2262 Refactor realm resource provider, remove admin resource provider and added example 2016-04-06 10:29:40 +02:00
Pedro Igor 7c11bd2214 [KEYCLOAK-2262] - New SPIs to extend both Realm and Admin RESTful APIs 2016-04-06 10:26:59 +02:00
Stian Thorgersen 7280eb3cd9 Merge pull request #2510 from stianst/KEYCLOAK-2748-1.9
KEYCLOAK-2748
2016-04-06 09:10:21 +02:00
Stian Thorgersen 4d38c1f95d KEYCLOAK-2748
Mark modules as private
2016-04-06 08:07:52 +02:00
Stian Thorgersen 8d196500d8 Merge pull request #2504 from stianst/KEYCLOAK-2707-1.9
KEYCLOAK-2707 Fix account management layout for medium size screens
2016-04-05 13:26:05 +02:00
Marek Posolda a0e21c8bf6 Merge pull request #2506 from mposolda/1.9.x
KEYCLOAK-2623 Remove auth-server-url-for-backend-requests from adapters
2016-04-05 13:09:57 +02:00
mposolda 6b85ff0d77 Removed docker-cluster as integration-arquillian has support for clustering tests now 2016-04-05 11:41:53 +02:00
mposolda 89b622e6a0 KEYCLOAK-2623 Remove auth-server-url-for-backend-requests from adapters 2016-04-05 11:41:53 +02:00
Stian Thorgersen 53e2e352fd Merge pull request #2414 from velias/KEYCLOAK-2670
KEYCLOAK-2670 - client app is able to push additional HTTP GET
2016-04-05 11:20:04 +02:00
Stian Thorgersen fda48fc537 Merge pull request #2501 from vmuzikar/1.9.x
KEYCLOAK-2745 More UI tests stabilization
2016-04-05 11:19:07 +02:00
Stian Thorgersen 3d8721246a Merge pull request #2499 from stianst/KEYCLOAK-2722-1.9
KEYCLOAK-2722 Check user session in token introspection endpoint
2016-04-05 11:18:34 +02:00
Stian Thorgersen 0b3847eb5d KEYCLOAK-2707 Fix account management layout for medium size screens 2016-04-05 10:31:16 +02:00
Vaclav Muzikar 96606fe3da KEYCLOAK-2745 More UI tests stabilization
(cherry picked from commit 3dbf5ee)
2016-04-05 10:14:41 +02:00
Stian Thorgersen b061288d1c KEYCLOAK-2722 Check user session in token introspection endpoint 2016-04-05 09:32:14 +02:00
Stian Thorgersen 89080af339 Merge pull request #2497 from stianst/KEYCLOAK-2652-1.9
KEYCLOAK-2652 Added fasterxml modules to as7 adapter dist
2016-04-05 08:57:56 +02:00
Stian Thorgersen 7bfe51c925 Merge pull request #2495 from stianst/KEYCLOAK-2711-1.9
KEYCLOAK-2711
2016-04-05 08:54:36 +02:00
Stian Thorgersen 07b43f11e2 Merge pull request #2493 from stianst/KEYCLOAK-2704-1.9
KEYCLOAK-2704
2016-04-05 08:54:20 +02:00
Marek Posolda 8b4fe15aeb Merge pull request #2486 from mposolda/1.9.x
databaseSchema option - proper support for "validate" for both JPA and Mongo
2016-04-05 08:48:37 +02:00
Stian Thorgersen 95486ef962 KEYCLOAK-2652 Added fasterxml modules to as7 adapter dist 2016-04-05 08:02:59 +02:00
Stian Thorgersen 5a799d4c33 KEYCLOAK-2711
Button for 'impersonate user' is visible when I am creating new user
2016-04-05 07:54:31 +02:00
Stian Thorgersen 5da2fad0a2 KEYCLOAK-2704
User count missing in REST admin endpoint
2016-04-05 07:48:51 +02:00
Bill Burke 6c84520021 Merge pull request #2491 from patriot1burke/1.9.x
KEYCLOAK-2669
2016-04-04 21:14:21 -04:00
Bill Burke 2955c814b3 KEYCLOAK-2669 2016-04-04 21:13:14 -04:00
Bill Burke aad3b77996 Merge pull request #2489 from patriot1burke/1.9.x
KEYCLOAK-2738
2016-04-04 18:54:51 -04:00
Bill Burke 109191f248 KEYCLOAK-2738 2016-04-04 18:48:22 -04:00
mposolda 749130b689 KEYCLOAK-2737 connectionsMongo: Support for 'databaseSchema: validate' 2016-04-04 22:23:24 +02:00
mposolda a8732aa83c KEYCLOAK-2744 connectionsJpa: the databaseSchema 'validate' should check if database schema is updated to latest version 2016-04-04 22:23:24 +02:00
Bill Burke 6b9aa49f79 Merge pull request #2482 from stianst/KEYCLOAK-2742-1.9.x
KEYCLOAK-2742
2016-04-04 12:54:27 -04:00
Stian Thorgersen 50b701ccf0 Merge pull request #2483 from stianst/1.9.x
Minor update to themes README.txt
2016-04-04 15:26:25 +02:00
Stian Thorgersen 7a67217c87 Minor update to themes README.txt 2016-04-04 15:24:40 +02:00
Stian Thorgersen 4f861dcbec KEYCLOAK-2742
Broken navigation links while creating/editing a Client Mapper
2016-04-04 15:18:32 +02:00
Stian Thorgersen 4be5d27ada Merge pull request #2480 from stianst/KEYCLOAK-2651-1.9.x
KEYCLOAK-2651
2016-04-04 10:05:04 +02:00
Stian Thorgersen 71b0ffa3ca Merge pull request #2478 from stianst/1.9.x
KEYCLOAK-2608
2016-04-04 10:04:47 +02:00
Stian Thorgersen 7ff35067aa KEYCLOAK-2651
No CSRF protection or general security headers on welcome page
2016-04-04 09:12:01 +02:00
Stian Thorgersen 05ee844bf6 KEYCLOAK-2608
Timestamp resolution of 1s for Event.time is inappropriate for use with tests
2016-04-04 08:31:04 +02:00
Stian Thorgersen d05a139a5f Merge pull request #2472 from winfinit/1.9.x
fixed typo in javascript example
2016-04-04 08:16:12 +02:00
Bill Burke b8da04814b Merge pull request #2476 from patriot1burke/1.9.x
KEYCLOAK-2662
2016-04-01 17:55:46 -04:00
Bill Burke 5482a80fe3 KEYCLOAK-2662 2016-04-01 16:43:16 -04:00
Bill Burke 2fd2812c94 Merge pull request #2459 from vmuzikar/1.9.x
KEYCLOAK-2732
2016-04-01 16:03:08 -04:00
Bill Burke bd0cd93c90 Merge pull request #2474 from patriot1burke/1.9.x
KEYCLOAK-2512
2016-04-01 16:01:58 -04:00
Bill Burke 90efb232a4 KEYCLOAK-2512 2016-04-01 14:50:55 -04:00
Roman Jurkov 431bf08c83 fixed typo in javascript example 2016-04-01 14:28:06 -04:00
Marek Posolda d6a70fb31e Merge pull request #2471 from mposolda/1.9.x
KEYCLOAK-2737 Remove 'databaseSchema' property from connectionsMongo
2016-04-01 18:48:40 +02:00
mposolda a049cfefe8 KEYCLOAK-2737 Remove 'databaseSchema' property from connectionsMongo 2016-04-01 16:55:46 +02:00
Marek Posolda 88725f68dd Merge pull request #2469 from mposolda/1.9.x
KEYCLOAK-2613 KEYCLOAK-2413 Export/import fixes and improvements
2016-04-01 16:46:13 +02:00
mposolda e07aefdcfd KEYCLOAK-2613 Add version to RealmRepresentation in JSON exports 2016-04-01 15:49:35 +02:00
mposolda 878b724ce1 KEYCLOAK-2413 Very slow export/import of realms with large users count 2016-04-01 15:33:39 +02:00
Marek Posolda d0bcb6b6aa Merge pull request #2467 from mposolda/1.9.x
Fix LDAPGroupMapperTest with MSAD and Mongo
2016-04-01 11:22:58 +02:00
mposolda e6489b3bc1 Fix LDAPGroupMapperTest with MSAD and Mongo 2016-04-01 10:43:36 +02:00
Marek Posolda aebc473071 Merge pull request #2465 from mposolda/1.9.x
KEYCLOAK-2661 Broken migration from Keycloak 1.5 with Mongo 3
2016-04-01 09:28:32 +02:00
mposolda fdf43f058a KEYCLOAK-2661 Broken migration from Keycloak 1.5 with Mongo 3 2016-03-31 22:29:46 +02:00
Bill Burke 6886510e32 Merge pull request #2463 from patriot1burke/1.9.x
KEYCLOAK-2621
2016-03-31 14:34:47 -04:00
Bill Burke dafa2e3401 KEYCLOAK-2621 2016-03-31 14:33:58 -04:00
Bill Burke e67d37e9d8 Merge pull request #2461 from patriot1burke/1.9.x
KEYCLOAK-2516
2016-03-31 13:58:01 -04:00
Bill Burke 9422542635 KEYCLOAK-2516 2016-03-31 13:57:13 -04:00
Vaclav Muzikar f5bed87eec KEYCLOAK-2732 2016-03-31 18:31:06 +02:00
Marek Posolda 7d2f0fd5cf Merge pull request #2456 from mposolda/1.9.x
KEYCLOAK-2610 Performance improve - add more indexes to database
2016-03-31 13:36:02 +02:00
mposolda cfd8770499 KEYCLOAK-2610 Add more indexes to database 2016-03-31 11:48:41 +02:00
mposolda a540e9a0da KEYCLOAK-2610 More operations added to ManyUsersTest 2016-03-31 11:48:41 +02:00
Bill Burke 028059a668 Merge pull request #2455 from patriot1burke/1.9.x
KEYCLOAK-2716
2016-03-30 20:26:48 -04:00
Bill Burke 1031d6b6f5 resolve conflict 2016-03-30 18:23:18 -04:00
Bill Burke c6a0243c92 KEYCLOAK-2716 2016-03-30 18:14:47 -04:00
Bill Burke 9736f56d3b Merge pull request #2453 from patriot1burke/1.9.x
KEYCLOAK-2490
2016-03-30 15:49:40 -04:00
Bill Burke 662d50eeea Merge pull request #2451 from patriot1burke/1.9.x
KEYCLOAK-2691
2016-03-30 15:47:57 -04:00
Bill Burke bfbbd5375f KEYCLOAK-2490 2016-03-30 15:42:05 -04:00
Bill Burke b735106750 Merge pull request #2445 from mhajas/js-console-1.9.x-PR
KEYCLOAK-2725 Run js-console example on non-relative scanario + tests of implicit flow
2016-03-30 15:16:55 -04:00
Bill Burke 1857c0c0b4 Merge pull request #2431 from mstruk/assert-events-b
KEYCLOAK-2589 KEYCLOAK-2607 KEYCLOAK-2597 Port AssertEvents to integration-arquillian
2016-03-30 15:16:34 -04:00
Bill Burke 157bb84bce Merge pull request #2448 from tkyjovsk/KEYCLOAK-2641-fix_1.9.x
KEYCLOAK-2641 fix 1.9.x
2016-03-30 15:15:36 -04:00
Bill Burke 52617e6ef1 Merge remote-tracking branch 'remote19/1.9.x' into b_1_9 2016-03-30 15:13:51 -04:00
Bill Burke 239816f4f5 KEYCLOAK-2691 2016-03-30 15:13:39 -04:00
Tomas Kyjovsky e4ee88a492 KEYCLOAK-2641 updated READMEs 2016-03-30 18:15:56 +02:00
Tomas Kyjovsky 353958538c KEYCLOAK-2641 Fixed location of module.xsl 2016-03-30 18:15:36 +02:00
mhajas 47a91ccf33 Run js-console example on non-relative scanario + tests of implicit flow 2016-03-30 12:20:40 +02:00
Bill Burke 85baeeb34e Merge pull request #2442 from ssilvert/1.9.x
KEYCLOAK-2619: Partial Import doesn't support groups
2016-03-28 22:58:33 -04:00
Stan Silvert ef1c8199a5 KEYCLOAK-2619: Partial Import doesn't support groups 2016-03-28 15:56:06 -04:00
Bill Burke 89da594735 Merge pull request #2440 from patriot1burke/1.9.x
KEYCLOAK-2718
2016-03-28 12:01:28 -04:00
Bill Burke 811085f9bd KEYCLOAK-2718 2016-03-28 11:13:50 -04:00
Bill Burke b8904bc018 Merge pull request #2438 from patriot1burke/1.9.x
KEYCLOAK-2698
2016-03-28 10:22:13 -04:00
Bill Burke 937d234964 KEYCLOAK-2698 2016-03-28 10:20:50 -04:00
Bill Burke b5bc4f15f8 Merge pull request #2427 from tkyjovsk/fail-if-no-tests-false-1.9.x
Arq. TestSuite Surefire config: failIfNoTests=false
2016-03-28 08:48:09 -04:00
Bill Burke 16863f2ed1 Merge pull request #2434 from patriot1burke/1.9.x
KEYCLOAK-2584
2016-03-25 00:08:47 -04:00
Bill Burke 805afbb592 KEYCLOAK-2584 2016-03-24 18:56:24 -04:00
Bill Burke 977b61f91c Merge pull request #2432 from patriot1burke/1.9.x
KEYCLOAK-2624
2016-03-24 16:24:57 -04:00
Bill Burke 91815c65a3 KEYCLOAK-2624 2016-03-24 15:43:08 -04:00
Marko Strukelj 13cb6f481f KEYCLOAK-2597 Invalid children group location header response 2016-03-24 17:57:09 +01:00
Marko Strukelj dc254ff0f7 KEYCLOAK-2607 Migrate Group tests to ARQ testsuite 2016-03-24 17:57:08 +01:00
Marko Strukelj a633241d2f KEYCLOAK-2589 Copy AssertEvents to Arquillian testsuite and modify to pull events from admin endpoints 2016-03-24 17:57:00 +01:00
Vlastimil Elias 97b38f4ccd KEYCLOAK-2670 - client app is able to push additional HTTP GET
parameters in initial OpenID auth request for use in Auth flows
2016-03-24 16:19:13 +01:00
Marek Posolda 416e4948d7 Merge pull request #2428 from mposolda/1.9.x
KEYCLOAK-2713 Fix error at startup
2016-03-24 16:12:04 +01:00
mposolda 60dff589d4 KEYCLOAK-2713 Fix error at startup 2016-03-24 15:30:11 +01:00
Tomas Kyjovsky 61656c6eba Arq. TestSuite Surefire config: failIfNoTests=false 2016-03-24 15:26:20 +01:00
Bill Burke 2affc4d847 Merge pull request #2422 from tkyjovsk/KEYCLOAK-2641-1.9.x
KEYCLOAK-2641 moved app-server configurations from adapter tests
2016-03-24 09:31:36 -04:00
Bill Burke 09179159e7 Merge pull request #2423 from patriot1burke/1.9.x
KEYCLOAK-2543
2016-03-24 09:30:51 -04:00
Bill Burke b43dc8348d KEYCLOAK-2543 2016-03-24 08:44:31 -04:00
Tomas Kyjovsky f3357c2b5b KEYCLOAK-2641 moved app-server configurations from adapter tests to servers/app-server module 2016-03-24 12:10:37 +01:00
Marek Posolda 79c308166a Merge pull request #2419 from mposolda/1.9.x
Fixes and performance improvements for "create user"
2016-03-24 11:58:41 +01:00
mposolda 2ea985fd30 KEYCLOAK-2610 Ommit checks for default roles and groups during creation of user 2016-03-24 10:47:18 +01:00
mposolda 385cfd5161 KEYCLOAK-2712 Default required actions not added when user created through admin console 2016-03-24 10:47:18 +01:00
mposolda db3cd543df KEYCLOAK-2710 Improve hibernate statistics report 2016-03-24 10:47:17 +01:00
Stian Thorgersen e139fadb02 Merge pull request #2412 from vmuzikar/1.9.x
[KEYCLOAK-2697] Fix some UI tests stability
2016-03-24 08:19:40 +00:00
Stian Thorgersen 10809b47ad Merge pull request #2408 from vmuzikar/1.9.x-KEYCLOAK-2694
[KEYCLOAK-2694] Add system property for test constants location
2016-03-24 08:18:35 +00:00
Stian Thorgersen dd449ffed0 Merge pull request #2406 from vramik/1.9.x-KEYCLOAK-2676
KEYCLOAK-2676 - Review clients tests
2016-03-24 08:17:36 +00:00
Marek Posolda 1f5124fc8a Merge pull request #2416 from mposolda/1.9.x
DB tuning - step 1
2016-03-23 23:29:23 +01:00
mposolda 741a251d89 KEYCLOAK-2610 Improve performance of creating users with MySQL 2016-03-23 22:34:00 +01:00
mposolda 1012611785 KEYCLOAK-2710 Possibility to log some hibernate statistics 2016-03-23 22:33:50 +01:00
Marek Posolda 465f828d73 Merge pull request #2404 from mposolda/1.9.x-idpcache
KEYCLOAK-2632 Caching of identity provider links
2016-03-22 21:35:26 +01:00
mposolda 038294d5c1 KEYCLOAK-2632 Remove flag from UserCacheSession.invalidateUsers 2016-03-22 18:04:59 +01:00
Vaclav Muzikar d1b33e1638 [KEYCLOAK-2697] Fix some UI tests stability 2016-03-22 14:29:35 +01:00
Marek Posolda d863a4b143 Merge pull request #2409 from mposolda/1.9.x
LDAP fixes
2016-03-22 13:43:18 +01:00
mposolda 4a073b6e46 KEYCLOAK-2696 Unexpected error when trying to delete role mappings from read-only LDAP role mapper 2016-03-22 13:01:40 +01:00
mposolda 30b0c35442 KEYCLOAK-2682 NPE when LDAP groups points to non-existent user 2016-03-22 12:26:29 +01:00
Vaclav Muzikar ef5bb6d447 Add system property for test constants location
(cherry picked from commit f9afa13)
2016-03-22 12:21:29 +01:00
Vlasta Ramik 6aa0c7ca39 KEYCLOAK-2676 - Review clients tests 2016-03-22 11:52:20 +01:00
mposolda 70b3091097 KEYCLOAK-2632 Caching of identity provider links 2016-03-22 10:20:22 +01:00
Stian Thorgersen 210a79a575 Merge pull request #2403 from stianst/1.9.x
KEYCLOAK-2657 Remove copyright.txt and README.txt from server dist
2016-03-22 08:34:41 +00:00
Stian Thorgersen a4fb4fd530 KEYCLOAK-2657 Remove copyright.txt and README.txt from server dist 2016-03-22 07:28:32 +00:00
Marek Posolda 6f56320177 Merge pull request #2400 from mposolda/1.9.x
Caching of user consents and serviceAccount links
2016-03-22 08:03:36 +01:00
mposolda 4d13b5105e KEYCLOAK-2631 Caching of service account links 2016-03-22 07:02:18 +01:00
mposolda 97a398790f KEYCLOAK-2630 Add caching for user consents 2016-03-22 07:01:59 +01:00
mposolda c09da5cac8 KEYCLOAK-2687 ZIPException during import big number of users 2016-03-22 07:01:46 +01:00
Stian Thorgersen 9521e71840 Merge pull request #2397 from vramik/KEYCLOAK-2690
KEYCLOAK-2690 - create page source file when test fails
2016-03-21 15:26:26 +01:00
Stian Thorgersen e5d09e1b04 Merge pull request #2396 from mhajas/mellon-realm-1.9.x-PR
KEYCLOAK-2689 Modify mod_auth_mellon realm for rhel7
2016-03-21 15:21:30 +01:00
Stian Thorgersen ebe6d5c5c1 Merge pull request #2394 from mhajas/mellon-timeout-1.9.x-PR
KEYCLOAK-2688 Modified session length in mod_auth_mellon test
2016-03-21 15:21:03 +01:00
Stian Thorgersen 0320884c72 Merge pull request #2387 from pdrozd/1.9.x
KEYCLOAK-2685 - Updated EAP7 namespaces
2016-03-21 15:20:20 +01:00
Stian Thorgersen a254d2120d Merge pull request #2390 from stianst/1.9.x
KEYCLOAK-2686 - Fix failing migration from 1.9.1 to 1.9.2.
2016-03-21 15:12:21 +01:00
Vlasta Ramik 4157907358 create page source file when test fails 2016-03-21 14:16:55 +01:00
mhajas dfc8708808 Modify realm for rhel7 2016-03-21 12:44:43 +01:00
mhajas 67c40eb212 Modified session length 2016-03-21 12:38:00 +01:00
Thomas Darimont bafaef7060 KEYCLOAK-2664 - QRCodeResource should prohibit caching of the generated image
Added cache-control headers to avoid caching for generated
QRCode images.

Adjusted CacheControlUtil#noCache() to avoid caching more aggressively.
2016-03-21 10:39:53 +01:00
Stian Thorgersen ee06eda05c Merge pull request #2379 from vmuzikar/1.9.x
Add properties file for some "constants" used in integration tests
2016-03-21 10:37:31 +01:00
Thomas Darimont a3525dd073 KEYCLOAK-2686 - Fix failing migration from 1.9.1 to 1.9.2.
Since the `Map` returned by `realm.getBrowserSecurityHeaders()` is unmodifiable
we need to add the new header setting to a copy of the map which we then set
on the realm.
2016-03-21 10:31:43 +01:00
Pavel Drozd f97f0e4e1b KEYCLOAK-2685 - Updated EAP7 namespaces 2016-03-21 08:59:05 +01:00
Marek Posolda c62e93577b Merge pull request #2385 from mposolda/1.9.x
KEYCLOAK-2681 JS adapter init function with initOptions argument does…
2016-03-18 14:16:47 +01:00
ratcashdev bcebd3fb83 KEYCLOAK-2679: Fix when importing empty uniqueMember attributes 2016-03-18 12:20:37 +01:00
mposolda 0589c82242 KEYCLOAK-2681 JS adapter init function with initOptions argument doesn't call success callback 2016-03-18 12:08:33 +01:00
Vaclav Muzikar 4ddf4d1c99 Add support for testing default theme name in prop file
(cherry picked from commit 2d7424c)
2016-03-14 16:44:00 +01:00
Vaclav Muzikar a98148f19b Add LDAP vendors test
(cherry picked from commit cd063c6)
2016-03-14 16:43:39 +01:00
Vaclav Muzikar d1072e8942 Add support for some test constants in props file
(cherry picked from commit a35aa47)
2016-03-14 16:43:24 +01:00
Marek Posolda 5b0254f0c7 Merge pull request #2376 from mposolda/1.9.x
KEYCLOAK-2634 Better error reporting if password update failed due to…
2016-03-14 14:32:24 +01:00
mposolda c2b406e7d6 KEYCLOAK-2634 Better error reporting if password update failed due to MSAD password policy 2016-03-14 13:35:30 +01:00
Marek Posolda 4821290c32 Merge pull request #2375 from mposolda/1.9.x
A bit more details about Kerberos and LDAP mappers in docs
2016-03-14 11:52:59 +01:00
mposolda d3bb68c2b0 A bit more details about Kerberos and LDAP mappers in docs 2016-03-14 11:51:13 +01:00
Marek Posolda 9560364a1c Merge pull request #2372 from mposolda/1.9.x
1.9.x
2016-03-14 10:32:32 +01:00
mposolda 4b49bc7140 KEYCLOAK-2659 Allow sync all roles even if there are more than 1000 2016-03-14 09:37:31 +01:00
mposolda 88bac57cad KEYCLOAK-2644 Delete user with a READ_ONLY LDAP federation provider just from Keycloak DB 2016-03-14 09:27:21 +01:00
Marek Posolda 9630921d91 Merge pull request #2371 from mposolda/1.9.x
LDAP fixes
2016-03-11 23:12:10 +01:00
Bill Burke 84e216c2ac Merge pull request #2369 from patriot1burke/1.9.x
refactor user cache
2016-03-11 16:57:15 -05:00
mposolda 0bc72e908f KEYCLOAK-2655 Support of lazy sync LDAP groups, which user is member of 2016-03-11 22:29:43 +01:00
mposolda 6910572bd2 KEYCLOAK-2643 Added write-only property to LDAP full-name attribute mapper 2016-03-11 22:29:43 +01:00
mposolda a4dd8a38b3 KEYCLOAK-2629 LDAP Federation provider - input fields validation 2016-03-11 22:29:42 +01:00
mposolda f0b4127567 KEYCLOAK-2640 LDAP group sync does not sync more than 1000 groups 2016-03-11 22:29:42 +01:00
Bill Burke c4f3a4e68e refactor user cache
KEYCLOAK-2612 Set default eviction strategy for users cache
2016-03-11 11:43:06 -05:00
Stian Thorgersen c0aa4289e2 Merge pull request #2367 from stianst/KEYCLOAK-2612
KEYCLOAK-2612 Set default eviction strategy for users cache
2016-03-11 16:22:51 +01:00
Stian Thorgersen 9be600cffe KEYCLOAK-2593 Character set missing from responses and no content sniffing defense in place 2016-03-11 15:33:09 +01:00
Stian Thorgersen c998f6eb53 KEYCLOAK-2612 Set default eviction strategy for users cache 2016-03-11 15:29:30 +01:00
Stian Thorgersen c901b38858 Merge pull request #2366 from stianst/KEYCLOAK-2637
KEYCLOAK-2637
2016-03-11 15:23:08 +01:00
Stian Thorgersen 4bd09cf14b KEYCLOAK-2637
ModelExceptionMapper uses AdminMessagesProvider which loads messages outside of themes
2016-03-11 13:01:18 +01:00
Stian Thorgersen 3edadb01c5 Merge pull request #2363 from stianst/1.9.x
KEYCLOAK-2636
2016-03-11 12:33:17 +01:00
Stian Thorgersen b738764442 KEYCLOAK-2636
Tooltip for redirect uri is wrong
2016-03-11 11:12:53 +01:00
Marek Posolda 660fd94e7f Merge pull request #2362 from mposolda/1.9.x
KEYCLOAK-2628 protected method to IdpCreateUserIfUniqueAuthenticator …
2016-03-11 11:08:23 +01:00
mposolda a3138b8514 KEYCLOAK-2628 protected method to IdpCreateUserIfUniqueAuthenticator after user is registered 2016-03-11 10:05:07 +01:00
helio-frota 627e434b73 minor update javascript adapter docs 2016-03-11 06:03:40 +01:00
Stian Thorgersen 406754f31b Merge branch 'master' of https://github.com/keycloak/keycloak into 1.9.x 2016-03-10 08:09:40 +01:00
Stian Thorgersen b9fea7b143 Merge pull request #2357 from stianst/master
Fixes
2016-03-10 08:08:09 +01:00
Stian Thorgersen ae63830c22 Merge pull request #2355 from abstractj/KEYCLOAK-2633
Let the admin manage her own account
2016-03-10 07:30:49 +01:00
Stian Thorgersen 96967c0373 Merge pull request #2354 from vramik/KEYCLOAK-2586
KEYCLOAK-2586 - fix URL providers on classpath for graphene 2.1.0.Aplha3
2016-03-10 07:30:26 +01:00
Stian Thorgersen 6e0eb21428 Merge pull request #2352 from mposolda/master
KEYCLOAK-2601 Fix incorrectly autodetected dialect with MSSQL2014
2016-03-10 07:29:28 +01:00
Stian Thorgersen e295efed07 Revert "Updated docs for KEYCLOAK-1020"
This reverts commit 6fe3a3da71.
2016-03-10 07:28:45 +01:00
Stian Thorgersen cd2f6e83b3 Allow ignoring patterns in LogChecker 2016-03-10 07:28:45 +01:00
Stian Thorgersen d722e53108 Next is 1.9.2.Final 2016-03-10 07:28:27 +01:00
mposolda 28252e2409 Fix failing test 2016-03-09 16:49:01 +01:00
Bruno Oliveira 746d285c7b Let the admin manage her own account 2016-03-09 12:16:21 -03:00
Vlasta Ramik 32b29bb130 KEYCLOAK-2586 - fix URL providers on classpath for graphene 2.1.0.Aplha3 2016-03-09 13:58:07 +01:00
mposolda 583f8ad739 KEYCLOAK-2601 Fix incorrectly autodetected dialect with MSSQL2014 2016-03-09 11:56:31 +01:00
Stian Thorgersen b371521b33 Merge pull request #2350 from mposolda/1.9.x
1.9.x
2016-03-09 06:13:52 +01:00
Stian Thorgersen 321b23a78d Merge pull request #2349 from mposolda/master
Log DB info in arquillian testsuite
2016-03-09 06:13:40 +01:00
mposolda f151933d91 Log DB info in arquillian testsuite 2016-03-08 22:08:45 +01:00
mposolda 5ea93822e7 Disable DBLockTest for now 2016-03-08 22:08:33 +01:00
mposolda cafd2d80d2 Added exclusion of old commons-io dependency as it's causing issues in some environments 2016-03-08 22:08:22 +01:00
mposolda c9dcd7973a Fix DB2 2016-03-08 22:08:08 +01:00
mposolda bcace1eacf Log DB info in arquillian testsuite 2016-03-08 22:04:25 +01:00
Marek Posolda dad4945358 Merge pull request #2347 from mposolda/master
Disable DBLockTest for now
2016-03-08 17:57:13 +01:00
mposolda f914a30b6e Disable DBLockTest for now 2016-03-08 17:44:03 +01:00
Marek Posolda d65fb963e6 Merge pull request #2346 from mposolda/master
Added exclusion of old commons-io dependency as it's causing issues i…
2016-03-08 17:42:51 +01:00
mposolda 5772ea2b09 Added exclusion of old commons-io dependency as it's causing issues in some environments 2016-03-08 17:01:48 +01:00
Marek Posolda 620f22249a Merge pull request #2345 from mposolda/master
Fix DB2
2016-03-08 16:06:57 +01:00
mposolda 29052019c5 Fix DB2 2016-03-08 16:05:45 +01:00
Marek Posolda c17b70e454 Merge pull request #2344 from mposolda/master
KEYCLOAK-2611 Keycloak fails to start with Oracle DB
2016-03-08 14:35:43 +01:00
Stian Thorgersen 1199fa7f6d Merge pull request #2343 from stianst/KEYCLOAK-2596
KEYCLOAK-2596 Fix import with dir and ignore existing
2016-03-08 13:50:57 +01:00
Stian Thorgersen 4928f779f7 Merge pull request #2329 from mbaluch/master
KPR-87 - Agreement on terms and conditions as part of authentication …
2016-03-08 13:50:49 +01:00
mposolda 8371c256b2 KEYCLOAK-2611 Keycloak fails to start with Oracle DB 2016-03-08 13:49:19 +01:00
Marek Baluch fa0335613f KPR-87 - Agreement on terms and conditions as part of authentication - Tests 2016-03-08 10:32:25 +01:00
Stian Thorgersen dc1d0e7f44 KEYCLOAK-2596 Fix import with dir and ignore existing 2016-03-08 08:55:10 +01:00
Marek Posolda 229eca302f Merge pull request #2342 from mposolda/master
LDAP fixes
2016-03-08 08:46:28 +01:00
Stian Thorgersen 446c9fea4b Merge pull request #2340 from dbarentine/master
KEYCLOAK-2609 Use createCredential so that authentication will work with both 2.x a…
2016-03-08 07:54:46 +01:00
Stian Thorgersen 1d882cdb87 Merge pull request #2339 from tkyjovsk/jpa-performance
Added workaround for KEYCLOAK-2560 to jpa-performance tests.
2016-03-08 07:53:41 +01:00
Stian Thorgersen bdc5f1c185 Merge pull request #2335 from mhajas/master
Run adapter tests on EAP6/7 + test fixes
2016-03-08 07:53:11 +01:00
Stian Thorgersen 7b578b8c87 Merge pull request #2336 from byF/master
Updated docs for KEYCLOAK-1020
2016-03-08 07:52:40 +01:00
Stian Thorgersen 37f605de5b Merge pull request #2333 from mhajas/newSAMLTest
IdpInitiated login unauthorized test
2016-03-08 07:51:49 +01:00
mposolda 8d21cfc234 KEYCLOAK-2583 Synchronize users after creating ldap federation provider 2016-03-07 23:19:43 +01:00
mposolda df56265976 KEYCLOAK-2582 Wrong message after synchronization (removing user from ldap) 2016-03-07 23:19:43 +01:00
Dane Barentine 7be0b1c9f5 Use createCredential so that authentication will work with both 2.x and 3.x MongoDB servers 2016-03-07 10:14:00 -08:00
Tomas Kyjovsky 52f3693747 Added workaround for KEYCLOAK-2560 to jpa-performance tests.
Optional delete/reimport realm phases.
2016-03-07 18:10:12 +01:00
Marek Posolda 392b1f1e17 Merge pull request #2337 from mposolda/dblock2
KEYCLOAK-2529 More proper handling of DB errors during migration
2016-03-07 16:06:49 +01:00
mposolda ebb61c104b KEYCLOAK-2529 More proper handling of DB errors during migration 2016-03-07 15:19:12 +01:00
Farana, Zdenek 6fe3a3da71 Updated docs for KEYCLOAK-1020 2016-03-07 14:48:32 +01:00
Marek Posolda f597f163f7 Merge pull request #2334 from mposolda/dblock2
Fix testsuite with Mongo
2016-03-07 13:15:31 +01:00
mposolda 1ac0529d04 Fix testsuite with mongo 2016-03-07 12:21:43 +01:00
mposolda 3c60881d8c Check performance of multiple get calls over cluster 2016-03-07 12:21:43 +01:00
Marek Posolda 74ac00349e Merge pull request #2332 from mposolda/dblock2
KEYCLOAK-2529 Concurrent startup by more cluster nodes at the same ti…
2016-03-07 11:47:53 +01:00
mhajas 048c64b6bd IdpInitiated login unauthorized test 2016-03-07 11:23:36 +01:00
mhajas 5917d5885b Merge remote-tracking branch 'upstream/master' 2016-03-07 11:21:24 +01:00
mposolda 8da768a514 KEYCLOAK-2529 Concurrent startup by more cluster nodes at the same time. Added DBLockProvider 2016-03-07 10:34:30 +01:00
Stian Thorgersen ad63b18781 Merge pull request #2330 from stianst/KEYCLOAK-2605
KEYCLOAK-2605 Revert upgrade of Arquillian Graphene
2016-03-07 09:19:53 +01:00
Stian Thorgersen 95d5ce9dd4 KEYCLOAK-2605 Revert upgrade of Arquillian Graphene 2016-03-07 08:38:39 +01:00
Stian Thorgersen 56c3d53a24 Merge pull request #2324 from ssilvert/client-tests
KEYCLOAK-2535: ClientResource endpoint tests
2016-03-07 06:13:55 +01:00
Stian Thorgersen c91255f620 Merge pull request #2328 from abstractj/reg-cli-minor-fix
Client registration won't compile without these changes
2016-03-07 06:12:43 +01:00
Stian Thorgersen 4f047565fb Merge pull request #2326 from stianst/KEYCLOAK-2592
Keycloak 2592
2016-03-07 06:12:17 +01:00
Stan Silvert f65a053182 Make imports in ServerInfoAdminResource explicitly point to the new
packages.
2016-03-04 11:17:12 -05:00
Bill Burke b709ca96b1 Merge pull request #2327 from patriot1burke/master
cleanup cache
2016-03-04 11:08:50 -05:00
Bruno Oliveira 4a027d97b0 Client registration won't compile without these changes 2016-03-04 12:46:57 -03:00
Bill Burke 4be6dc2f0c cleanup cache 2016-03-04 10:30:48 -05:00
Stian Thorgersen 57b6ddbace KEYCLOAK-2592 Set secure on OAuth_Token_Request_State cookie 2016-03-04 14:22:48 +01:00
Stian Thorgersen bf38ec040f KEYCLOAK-2592 Set http-only on OAuth_Token_Request_State cookie 2016-03-04 13:43:00 +01:00
Stan Silvert 2c79456e72 KEYCLOAK-2535: ClientResource endpoint tests 2016-03-04 07:41:24 -05:00
Stian Thorgersen 8caad0118c Merge pull request #2322 from vramik/KEYCLOAK-2586
KEYCLOAK-2586 - Update arquillian component versions to make screensh…
2016-03-04 08:22:47 +01:00
Stian Thorgersen afdbdb285d Merge pull request #2323 from abstractj/KEYCLOAK-2585
KEYCLOAK-2585: Changes on Brute force messages
2016-03-04 08:18:16 +01:00
Bill Burke ad2638cc20 Merge pull request #2325 from jblashka/master
Increase CERTIFICATE column size
2016-03-03 20:26:43 -05:00
Jared Blashka 05c590ac88 Increase CERTIFICATE column size 2016-03-03 17:35:40 -05:00
Bruno Oliveira 8d6f71e7d1 KEYCLOAK-2585: Changes on Brute force messages 2016-03-03 10:11:03 -03:00
Vlasta Ramik 10e1b6206f KEYCLOAK-2586 - Update arquillian component versions to make screenshooter working 2016-03-03 13:39:10 +01:00
Marek Posolda 002074bb30 Merge pull request #2320 from mposolda/master
KEYCLOAK-2523 Fix concurrency tests with all databases by track trans…
2016-03-03 12:34:29 +01:00
Stian Thorgersen 375d4e9e83 Merge pull request #2321 from stianst/KEYCLOAK-2547
KEYCLOAK-2547 NPE in TokenEndpoint and InfinispanUserSessionProvider
2016-03-03 12:06:40 +01:00
mposolda 286de3e905 Fix failing test 2016-03-03 11:46:27 +01:00
mposolda a258dd51ee KEYCLOAK-2523 Fix concurrency tests with all databases by track transaction startup revision 2016-03-03 11:21:26 +01:00
Stian Thorgersen b4239c40c1 KEYCLOAK-2547 NPE in TokenEndpoint and InfinispanUserSessionProvider 2016-03-03 10:45:05 +01:00
Stian Thorgersen b6118a6705 Merge pull request #2319 from stianst/KEYCLOAK-2580
KEYCLOAK-2580 Failed to create execution flow
2016-03-03 10:33:42 +01:00
Stian Thorgersen 2bf3531c43 Merge pull request #2318 from stianst/KEYCLOAK-2577
KEYCLOAK-2577 Rollback session in KeycloakSessionServletFilter if not…
2016-03-03 10:33:29 +01:00
Stian Thorgersen 2d42ad9993 KEYCLOAK-2580 Failed to create execution flow 2016-03-03 09:18:48 +01:00
Stian Thorgersen 2edb7f6831 KEYCLOAK-2577 Rollback session in KeycloakSessionServletFilter if not committed by KeycloakTransactionCommitter 2016-03-03 08:59:19 +01:00
Stian Thorgersen 402feb9710 Merge pull request #2317 from stianst/KEYCLOAK-2576
KEYCLOAK-2576
2016-03-03 07:48:43 +01:00
Stian Thorgersen 13506bec82 Merge pull request #2316 from stianst/KEYCLOAK-2568
KEYCLOAK-2568 Add autocomplete=off to password and otp input fields
2016-03-03 07:28:25 +01:00
Stian Thorgersen 13b6c6f507 KEYCLOAK-2576 KEYCLOAK-2576
Changing locale on login screen doesn't affect current user
2016-03-03 07:06:10 +01:00
Stian Thorgersen 7b8869bde6 Removed english values from non-english messages bundles£ 2016-03-03 06:53:00 +01:00
Stian Thorgersen e4815cd103 Merge pull request #2314 from mstruk/admin-client
KEYCLOAK-2574 Add more admin-client authentication tests
2016-03-03 06:30:48 +01:00
Stian Thorgersen 4214793a2d KEYCLOAK-2568 Add autocomplete=off to password and otp input fields 2016-03-03 06:29:56 +01:00
Bill Burke 860b58552e Merge pull request #2315 from patriot1burke/master
concurrent transaction fix
2016-03-02 17:43:33 -05:00
Bill Burke a13bac4c9d concurrent transaction fix 2016-03-02 16:55:55 -05:00
Marko Strukelj c6fc7622d2 KEYCLOAK-2574 Add more admin-client authentication tests 2016-03-02 15:12:32 +01:00
Stian Thorgersen c584a1a161 Merge pull request #2313 from abstractj/documentation_updates
Inclusion of add user instructions for overlay
2016-03-02 14:52:54 +01:00
Bruno Oliveira b8c50c431c Inclusion of add user instructions for overlay 2016-03-02 10:14:41 -03:00
Stian Thorgersen cc776abacb Merge pull request #2311 from stianst/KEYCLOAK-2557
KEYCLOAK-2557
2016-03-02 08:50:55 +01:00
Stian Thorgersen fea5d5099d Merge pull request #2310 from stianst/KEYCLOAK-2570
KEYCLOAK-2570
2016-03-02 08:50:23 +01:00
Marek Posolda 95e1dedb32 Merge pull request #2306 from mposolda/mysql-concurrency
Added ConcurrentTransactionsTest
2016-03-02 08:14:40 +01:00
Stian Thorgersen 370b86141c KEYCLOAK-2557
Cannot login with email if another user is using this email as username
2016-03-02 08:08:48 +01:00
Stian Thorgersen 45b940ad2d Merge pull request #2308 from tkyjovsk/auth-server-eap7-cluster
KEYCLOAK-1679 Auth server eap7 cluster
2016-03-02 07:54:24 +01:00
Stian Thorgersen 8c3545d219 KEYCLOAK-2570
Login event error field typo (lower case)
2016-03-02 07:52:04 +01:00
Stian Thorgersen 2f3a1626d7 Merge pull request #2309 from tkyjovsk/console-ui-tests
KEYCLOAK-2570 disabled failing test
2016-03-02 07:26:45 +01:00
Stian Thorgersen 5d93f4a298 Merge pull request #2307 from stianst/KEYCLOAK-2566
KEYCLOAK-2566 kc-action-cell action buttons don't appear on IE
2016-03-02 07:04:42 +01:00
Tomas Kyjovsky 66a75d93ee KEYCLOAK-2570 disabled failing test 2016-03-01 23:08:19 +01:00
Tomas Kyjovsky e107a403cf Fixed & enabled SessionFailoverClusterTest by default 2016-03-01 21:44:46 +01:00
Stian Thorgersen 8270c0a19a KEYCLOAK-2566 kc-action-cell action buttons don't appear on IE 2016-03-01 19:58:11 +01:00
Stian Thorgersen db5efdca64 Merge pull request #2304 from stianst/KEYCLOAK-2513
KEYCLOAK-2513 Add test for direct grant with OTP
2016-03-01 19:33:45 +01:00
Stian Thorgersen 5eb319f3c5 Merge pull request #2303 from tkyjovsk/auth-server-jdk
Added property "auth.server.java.home" to the Arquillian testsuite.
2016-03-01 19:33:35 +01:00
Stian Thorgersen 6baa4a7950 Merge pull request #2302 from stianst/KEYCLOAK-2567
KEYCLOAK-2567 Order required actions alphabetically
2016-03-01 19:32:35 +01:00
Tomas Kyjovsky 73b6751219 KEYCLOAK-1679 added cluster profile for eap7 2016-03-01 16:13:12 +01:00
Tomas Kyjovsky c0de43d51f KEYCLOAK-1678 added cluster config to the EAP7 test server module 2016-03-01 16:12:59 +01:00
mposolda 5d9966f6df Ignore ConcurrentTransactionsTest as it's currently failing 2016-03-01 13:52:59 +01:00
mposolda 893fb2a55b Added ConcurrentTransactionsTest 2016-03-01 13:39:03 +01:00
Marek Posolda 4add134dff Merge pull request #2305 from mposolda/master
KEYCLOAK-2542 User can't set password for account created over social…
2016-03-01 11:54:52 +01:00
mhajas 7dc228beca IPv6 in login events 2016-03-01 11:42:16 +01:00
mposolda e6e367392a KEYCLOAK-2542 Fix tests 2016-03-01 10:52:35 +01:00
mposolda 0768bcc452 KEYCLOAK-2542 User can't set password for account created over social login if UserFedarationProvider used 2016-03-01 10:13:21 +01:00
Stian Thorgersen 4f8669d668 KEYCLOAK-2513 Add test for direct grant with OTP 2016-03-01 09:05:02 +01:00
Tomas Kyjovsky c65ed96bd7 Added property "auth.server.java.home" to the Arquillian testsuite. 2016-03-01 08:46:17 +01:00
Stian Thorgersen 7ad8a6e074 KEYCLOAK-2567 Order required actions alphabetically 2016-03-01 08:41:35 +01:00
Stian Thorgersen 2bddd9ad34 Merge pull request #2297 from tkyjovsk/console-ui-tests
Fixed admin console tests' compilation errors.
2016-03-01 08:00:46 +01:00
Stian Thorgersen ff9ebb0f79 Merge pull request #2294 from vramik/KEYCLOAK-2565
KEYCLOAK-2565 - Add assert check to testsuite for KEYCLOAK-2554 and ...
2016-03-01 08:00:23 +01:00
Bill Burke 09133a9e2a Merge pull request #2301 from patriot1burke/master
KEYCLOAK-2510
2016-02-29 20:51:34 -05:00
Bill Burke 32d15e2027 KEYCLOAK-2510 2016-02-29 20:39:44 -05:00
Bill Burke 8aa0727d88 Merge pull request #2300 from patriot1burke/master
KEYCLOAK-2536
2016-02-29 20:08:19 -05:00
Bill Burke c0d0c1f39a fix 2016-02-29 16:48:28 -05:00
Bill Burke 64daa568b9 KEYCLOAK-2536 2016-02-29 16:05:43 -05:00
Marek Posolda 47652ae179 Merge pull request #2298 from mposolda/master
KEYCLOAK-1928 Fix Saml with IBM JDK
2016-02-29 20:57:55 +01:00
mposolda e2558ca827 KEYCLOAK-1928 Fix Saml with IBM JDK 2016-02-29 17:32:33 +01:00
mhajas 5fb7e8186f Make adapter tests run also on EAP6 and EAP7 2016-02-29 17:23:27 +01:00
Tomas Kyjovsky e66060b00b Fixed admin console tests' compilation errors. 2016-02-29 17:13:08 +01:00
Bill Burke 84de9cca8e Merge pull request #2295 from patriot1burke/master
unsecure url has principal
2016-02-29 10:54:19 -05:00
Bill Burke 37584a24e0 unsecure url has principal
KEYCLOAK-2550
Typo in userguide

KEYCLOAK-1928 Kerberos working with IBM JDK

KEYCLOAK-1928 Remove sun.jdk.jgss module

KEYCLOAK-1928 Fix kerberos with adapter on JDK7

KPR-147 - Initial login scenarios around admin password - test

KEYCLOAK-2561 Fix issues with blank password

KEYCLOAK-2559 Missing add/remove button for 'Valid Redirect URIs' in a client settings form

Added simple test for JPA performance (with many users).

Fixed "re-import" operation logging.

Fixed for Timer.saveData()

Fixed for Timer.saveData()

ManyUsersTest: ArrayList --> LinkedList

Fix AbstractUserTest

Fix parentheses in login page object

Add tests for IDP initiated login

KEYCLOAK-1040
Allow import of realm keys (like we do for SAML)

KEYCLOAK-2556 Remove required for client create root url and saml endpoint

KEYCLOAK-2555 ForbiddenException when importing test realm or creating test user

KEYCLOAK-2553
Unexpected form behavior while creating a client

KEYCLOAK-2551
Broken navigation links while creating/editing a Client Mapper
2016-02-29 09:30:28 -05:00
Vlasta Ramik cfc61fa262 KEYCLOAK-2565 - Add assert check to testsuite for KEYCLOAK-2554 and KEYCLOAK-2555 2016-02-29 15:08:19 +01:00
Stian Thorgersen 4286f0560f Merge pull request #2293 from stianst/KEYCLOAK-2551
KEYCLOAK-2551
2016-02-29 14:06:46 +01:00
Stian Thorgersen 116d147bf7 Merge pull request #2292 from stianst/KEYCLOAK-2553
KEYCLOAK-2553
2016-02-29 14:06:13 +01:00
Stian Thorgersen a71adde8fa KEYCLOAK-2551
Broken navigation links while creating/editing a Client Mapper
2016-02-29 12:25:36 +01:00
Stian Thorgersen 45a03a654f KEYCLOAK-2553
Unexpected form behavior while creating a client
2016-02-29 12:05:20 +01:00
Stian Thorgersen 2154dd120b Merge pull request #2291 from stianst/KEYCLOAK-2555
KEYCLOAK-2555 ForbiddenException when importing test realm or creatin…
2016-02-29 12:00:44 +01:00
Stian Thorgersen 2a4dfe7920 Merge pull request #2290 from stianst/KEYCLOAK-2556
KEYCLOAK-2556 Remove required for client create root url and saml end…
2016-02-29 12:00:00 +01:00
Stian Thorgersen 5556736968 Merge pull request #2289 from stianst/KEYCLOAK-1040
KEYCLOAK-1040
2016-02-29 11:59:42 +01:00
Stian Thorgersen 24336bcd4d Merge pull request #2286 from mhajas/newSAMLTest
KEYCLOAK-2563 Add test for IDP initiated login
2016-02-29 11:59:35 +01:00
Stian Thorgersen 6fae1c6411 Merge pull request #2285 from mhajas/fixSAMLTest
Fix parentheses in login page object
2016-02-29 11:59:20 +01:00
Stian Thorgersen d7641f8830 Merge pull request #2282 from tkyjovsk/jpa-performance
Added some jpa perf tests (adding/removing many users)
2016-02-29 11:58:09 +01:00
Stian Thorgersen 24328fdc47 KEYCLOAK-2555 ForbiddenException when importing test realm or creating test user 2016-02-29 10:09:06 +01:00
Stian Thorgersen 4f46ab45cc KEYCLOAK-2556 Remove required for client create root url and saml endpoint 2016-02-29 09:48:15 +01:00
Stian Thorgersen ccfae82b77 KEYCLOAK-1040
Allow import of realm keys (like we do for SAML)
2016-02-29 09:35:08 +01:00
Stian Thorgersen 711e6a54ca Merge pull request #2283 from stianst/KEYCLOAK-2559
KEYCLOAK-2559 Missing add/remove button for 'Valid Redirect URIs' in …
2016-02-29 09:34:59 +01:00
Bill Burke 1d8f3d8702 Merge pull request #2288 from patriot1burke/master
clustered cache fixes
2016-02-26 18:22:38 -05:00
Bill Burke a0696fcb97 clustered testing 2016-02-26 16:45:58 -05:00
Bill Burke abddbfb3a4 clustered testing 2016-02-26 15:39:22 -05:00
Marek Posolda a97c4bdff9 Merge pull request #2287 from mposolda/master
KEYCLOAK-2561 Fix issues with blank password
2016-02-26 21:25:41 +01:00
mposolda e7a5b88b2d KEYCLOAK-2561 Fix issues with blank password 2016-02-26 18:14:37 +01:00
mhajas 4f0609f8b2 Add tests for IDP initiated login 2016-02-26 16:55:12 +01:00
mhajas e4d056f54b Fix parentheses in login page object 2016-02-26 16:50:00 +01:00
Tomas Kyjovsky a3f7339fca Fix AbstractUserTest 2016-02-26 14:57:28 +01:00
Stian Thorgersen 57cd7e132c KEYCLOAK-2559 Missing add/remove button for 'Valid Redirect URIs' in a client settings form 2016-02-26 13:53:27 +01:00
Stian Thorgersen d766c56eba Merge pull request #2278 from mbaluch/master
KPR-147 - Initial login scenarios around admin password - test
2016-02-26 13:46:52 +01:00
Tomas Kyjovsky 0fa2b5c25d ManyUsersTest: ArrayList --> LinkedList 2016-02-26 12:34:39 +01:00
Marek Baluch 072fe0d8a0 KPR-147 - Initial login scenarios around admin password - test 2016-02-26 12:21:51 +01:00
Marek Posolda 2ec355e2d2 Merge pull request #2281 from mposolda/master
KEYCLOAK-1928 Fix kerberos with adapter on JDK7
2016-02-26 11:36:04 +01:00
mposolda 94b3e85513 KEYCLOAK-1928 Fix kerberos with adapter on JDK7 2016-02-26 10:49:10 +01:00
Marek Posolda 4abcb2761f Merge pull request #2280 from mposolda/master
KEYCLOAK-1928 Kerberos working with IBM JDK
2016-02-26 10:13:14 +01:00
mposolda aae550a7c7 KEYCLOAK-1928 Remove sun.jdk.jgss module 2016-02-26 09:16:39 +01:00
mposolda 7f32ce810a KEYCLOAK-1928 Kerberos working with IBM JDK 2016-02-26 09:16:39 +01:00
Stian Thorgersen 13acd512b6 Merge pull request #2279 from stianst/master
KEYCLOAK-2550
2016-02-26 07:54:18 +01:00
Stian Thorgersen b94ced2204 KEYCLOAK-2550
Typo in userguide
2016-02-26 07:53:38 +01:00
Tomas Kyjovsky c59123e974 Fixed for Timer.saveData() 2016-02-26 03:21:15 +01:00
Tomas Kyjovsky ff2c100664 Fixed for Timer.saveData() 2016-02-26 03:20:57 +01:00
Tomas Kyjovsky 41949b63f6 Fixed "re-import" operation logging. 2016-02-26 02:31:51 +01:00
Tomas Kyjovsky aea35454bf Added simple test for JPA performance (with many users). 2016-02-26 02:24:20 +01:00
Stian Thorgersen 25d183c1d9 Merge pull request #2277 from pedroigor/KEYCLOAK-2471
Updating xmlsec to 2.0.5
2016-02-25 16:28:56 +01:00
Pedro Igor 3b8364f1e6 Updating xmlsec to 2.0.5 2016-02-25 11:43:00 -03:00
Stian Thorgersen ca81f3f18d Merge pull request #2275 from stianst/KEYCLOAK-2511
KEYCLOAK-2511 Rename session-state in access token response to sessio…
2016-02-25 12:03:37 +01:00
Stian Thorgersen 6df72d67c5 Merge pull request #2274 from stianst/KEYCLOAK-2500
KEYCLOAK-2500 Add cors headers to .well-known endpoints
2016-02-25 12:03:25 +01:00
Stian Thorgersen f6c7ecf8e3 Merge pull request #2273 from stianst/KEYCLOAK-2522
KEYCLOAK-2522 master realm admin can't use client registration api
2016-02-25 12:03:07 +01:00
Stian Thorgersen d723efae77 Merge pull request #2276 from msavy/keycloak-update-docs
Update docs for move of themes and providers directories
2016-02-25 10:56:26 +01:00
Marc Savy b7f4d52de1 Update docs for change of themes and providers directories to reflect 1.9.x refactoring. 2016-02-25 09:50:11 +00:00
Stian Thorgersen 3ca39801dc KEYCLOAK-2511 Rename session-state in access token response to session_state 2016-02-25 10:14:12 +01:00
Stian Thorgersen da8f2dc2ce KEYCLOAK-2500 Add cors headers to .well-known endpoints 2016-02-25 10:05:46 +01:00
Stian Thorgersen 2fce06ffca KEYCLOAK-2522 master realm admin can't use client registration api 2016-02-25 09:54:34 +01:00
Stian Thorgersen 14ea988b24 Merge pull request #2267 from ssilvert/client-tests
KEYCLOAK-2533: Test values of events in LoginEventsTest
2016-02-25 08:50:09 +01:00
Bill Burke 5723baa367 Merge pull request #2272 from patriot1burke/master
group list caching
2016-02-24 18:31:25 -05:00
Bill Burke 450ce0e0e0 oops, showSql=false 2016-02-24 17:46:30 -05:00
Bill Burke 17ea3fca0b Merge remote-tracking branch 'upstream/master' 2016-02-24 17:21:25 -05:00
Bill Burke f10f00ba71 group list caching 2016-02-24 17:21:11 -05:00
Stian Thorgersen 8c73f8743d Merge pull request #2269 from stianst/KEYCLOAK-2539
KEYCLOAK-2539
2016-02-24 16:15:50 +01:00
Stian Thorgersen ab96114ef8 KEYCLOAK-2539
Migration fails if DisplayNameHtml is null for master realm
2016-02-24 06:59:32 +01:00
Bill Burke c45e40db99 Merge pull request #2268 from patriot1burke/master
query caches
2016-02-23 15:10:58 -05:00
Bill Burke 9488787986 Merge remote-tracking branch 'upstream/master' 2016-02-23 14:36:30 -05:00
Stan Silvert 64b2aed370 KEYCLOAK-2533: Test values of events in LoginEventsTest. Also do the same
for AdminEventTest.
2016-02-23 14:20:35 -05:00
Stian Thorgersen f63bb66170 Merge pull request #2266 from stianst/master
Added wallpaper svg
2016-02-23 20:09:04 +01:00
Stian Thorgersen 1957103270 Added wallpaper svg 2016-02-23 20:08:43 +01:00
Stan Silvert 3383b044b2 KEYCLOAK-2316: Sync admin client with endpoints for Client. First commit. 2016-02-23 13:29:12 -05:00
Stian Thorgersen f34260478e Merge pull request #2263 from vmuzikar/master
[KEYCLOAK-2532] Fix Console UI tests
2016-02-23 19:25:05 +01:00
Stian Thorgersen 4cf26a68fc Merge pull request #2264 from stianst/master
KEYCLOAK-2530
2016-02-23 19:24:30 +01:00
Stian Thorgersen 2c16335a03 Updated examples with moved themes directory 2016-02-23 15:30:50 +01:00
Stian Thorgersen af26b5b610 KEYCLOAK-2530
Missing IP address in Login Events
2016-02-23 14:33:30 +01:00
Stian Thorgersen eacd689f91 Merge pull request #2262 from stianst/master
KEYCLOAK-2527
2016-02-23 14:15:25 +01:00
Stian Thorgersen 023b558f43 KEYCLOAK-2527
Cordova not working
2016-02-23 13:32:00 +01:00
Vaclav Muzikar 8601b321d5 Fix InternationalizationTest 2016-02-23 13:22:56 +01:00
Vaclav Muzikar 83181f28b2 Swap 'expected' and 'actual' in URLAssert 2016-02-23 13:13:22 +01:00
Vaclav Muzikar 77c16c320e Fix LdapUserFederationTest 2016-02-23 12:58:39 +01:00
Vaclav Muzikar a6458250bc Merge branch 'master' of https://github.com/keycloak/keycloak 2016-02-23 12:11:17 +01:00
Marek Posolda 6654a154b9 Merge pull request #2259 from mposolda/master
Fix fuse adapter
2016-02-23 11:57:21 +01:00
mposolda 4d82cc92fe Fix fuse adapter 2016-02-23 11:19:34 +01:00
Stian Thorgersen 3e1976b3e5 Merge pull request #2255 from stianst/master
Next is 1.9.1.Final-SNAPSHOT
2016-02-23 10:59:53 +01:00
Marek Posolda 695f8d34ab Merge pull request #2257 from mposolda/master
KEYCLOAK-2526 JPA migration from 1.8.1 doesn't work
2016-02-23 10:37:53 +01:00
mposolda ad753a50a3 KEYCLOAK-2526 JPA migration from 1.8.1 doesn't work 2016-02-23 10:01:40 +01:00
Stian Thorgersen 0fc9cb78d5 KEYCLOAK-2525
Built-in themes not loaded from modules
2016-02-23 09:51:22 +01:00
Stian Thorgersen ec9c9b8ee1 Remove old logo from sunrise theme example 2016-02-23 09:06:51 +01:00
Bruno Oliveira 5ac3443729 Admin client example fails after login 2016-02-23 08:51:17 +01:00
Bruno Oliveira fac8c4a6d0 Angular Product raises an exception on logout 2016-02-23 08:49:58 +01:00
Bruno Oliveira d7f4277ba8 Admin cannot manage her own profile at Customer Portal app 2016-02-23 08:49:13 +01:00
Stian Thorgersen a1d9753ec2 Next is 1.9.1.Final-SNAPSHOT 2016-02-23 08:48:26 +01:00
Bill Burke 599faa454b Merge remote-tracking branch 'upstream/master' 2016-02-22 17:17:01 -05:00
Bill Burke 4dcdaf4985 role cached queries 2016-02-22 17:16:35 -05:00
Marek Posolda 03215787e0 Merge pull request #2250 from mposolda/master
Fix SyncFederationTest to work with MSSQL and envs with slower databases
2016-02-22 12:05:19 +01:00
mposolda 838764ba5a Fix SyncFederationTest to work with MSSQL and envs with slower databases 2016-02-22 12:04:27 +01:00
Stian Thorgersen 4fd97091ff Version bump to 2.0.0.CR1-SNAPSHOT 2016-02-22 11:36:56 +01:00
Stian Thorgersen a444899176 Merge pull request #2249 from stianst/master
KEYCLOAK-2482
2016-02-22 09:40:24 +00:00
Stian Thorgersen d21a01280b KEYCLOAK-2482
Themes doesn't support patching
2016-02-22 10:01:42 +01:00
Stian Thorgersen 0840f39495 Merge pull request #2247 from vramik/KEYCLOAK-2502
Update test jvm memory settings
2016-02-22 08:03:32 +00:00
Stian Thorgersen 367f3256ea Merge pull request #2246 from mhajas/fixDemoExample
Fix DemoExampleAdapterTest
2016-02-22 08:03:27 +00:00
Stian Thorgersen 0e8c87e649 Merge pull request #2245 from mhajas/master
KEYCLOAK-2405 Add tests for mod_auth_mellon
2016-02-22 08:03:21 +00:00
Stian Thorgersen 10024f9526 Merge pull request #2243 from abstractj/KEYCLOAK-2501
KEYCLOAK-2501: Add-user should prompt user for password if not set
2016-02-22 08:02:33 +00:00
Stian Thorgersen 38ce5e069c Merge pull request #2237 from lkubik/restructurizeParents
Update parent poms structure
2016-02-22 08:01:58 +00:00
Bill Burke daa09f9a41 more fine tuning 2016-02-20 09:40:04 -05:00
Bill Burke 1511f7088f javadoc 2016-02-19 17:08:45 -05:00
Bill Burke 2e64d01251 reorg caching 2016-02-19 16:38:31 -05:00
Marek Posolda b991ba44d3 Merge pull request #2248 from mposolda/master
LDAP fixes
2016-02-19 22:05:56 +01:00
mposolda b8cf8fabe2 KEYCLOAK-2505 docs 2016-02-19 22:05:35 +01:00
Bill Burke c45524d8d4 caching 2016-02-19 15:44:19 -05:00
mposolda daca6d7062 KEYCLOAK-2505 Keystore configuration is not honored for LDAP over SSL connections 2016-02-19 18:02:39 +01:00
Vlasta Ramik 10e5205a57 Update test jvm memory settings 2016-02-19 15:29:27 +01:00
mposolda 706d4fc01c KEYCLOAK-2507 All LDAP special DN characters should be escaped in LDAPDn 2016-02-19 14:54:33 +01:00
Vaclav Muzikar d3769caaac Add wait for body to AbstractPage.navigateTo
(cherry picked from commit aba731b)
2016-02-19 13:35:31 +01:00
mhajas 0aa1b37e30 Fix DemoExampleAdapterTest 2016-02-19 13:24:28 +01:00
Vaclav Muzikar 3a138db842 Fix UserAttributesTest
(cherry picked from commit 7ac10b3)
2016-02-19 12:51:11 +01:00
Vaclav Muzikar b41dd22ed3 Fix DefaultRolesTest
(cherry picked from commit 6e7470d)
2016-02-19 12:50:52 +01:00
Vaclav Muzikar c34aa5763d Fix TokensTest
(cherry picked from commit 32e6bb0)
2016-02-19 12:50:34 +01:00
Vaclav Muzikar 02851989b3 Fix SecurityDefensesTest
(cherry picked from commit 1973f02)
2016-02-19 12:50:11 +01:00
Vaclav Muzikar 9bde0af0f1 Fix InternationalizationTest
(cherry picked from commit d58a575)
2016-02-19 12:49:47 +01:00
Vaclav Muzikar 8006c64dba Add Alert assert messages
(cherry picked from commit 9f847fa)
2016-02-19 12:48:10 +01:00
Vaclav Muzikar 4b5fee02cc Fix AbstractClientTest.createClient
(cherry picked from commit 5ab40b0)
2016-02-19 12:47:59 +01:00
Vaclav Muzikar 1569cf7fb5 Fix ClientScopeForm
(cherry picked from commit 7edd674)
2016-02-19 12:47:29 +01:00
Vaclav Muzikar 5a0711655a Fix ClientCredentialsForm
(cherry picked from commit 3e825bf)
2016-02-19 12:47:08 +01:00
Vaclav Muzikar b5660cbbab Fix LoginActions.feedbackText selector
(cherry picked from commit d05f809)
2016-02-19 12:45:52 +01:00
Vaclav Muzikar ec2cfba670 Fix LoginForm.registerLink
(cherry picked from commit 6414232)
2016-02-19 12:45:01 +01:00
Vaclav Muzikar 97d0f39346 Fix getFeedbackText()
(cherry picked from commit 131b99b)
2016-02-19 12:42:31 +01:00
Marek Posolda 7fc5afcc2f Merge pull request #2244 from mposolda/master
KEYCLOAK-2508 Possible NullPointerException during bigger load when r…
2016-02-19 12:29:17 +01:00
mhajas 2c1b13d6c2 Add tests for mod_auth_mellon 2016-02-19 11:53:19 +01:00
mposolda a441be57ed KEYCLOAK-2508 Possible NullPointerException during bigger load when removing UserSession 2016-02-19 11:49:30 +01:00
Bruno Oliveira 34a16f035a KEYCLOAK-2501: Add-user should prompt user for password if not set 2016-02-19 08:42:43 -02:00
Marek Posolda d5a57a2bbd Merge pull request #2242 from mposolda/master
KEYCLOAK-2479 Avoid ZIPException during bigger load
2016-02-18 21:49:51 +01:00
Bill Burke ed161d2426 Merge pull request #2238 from patriot1burke/master
KEYCLOAK-2477
2016-02-18 15:48:08 -05:00
mposolda 0f21b6f6d9 KEYCLOAK-2479 Avoid ZIPException during bigger load 2016-02-18 19:28:20 +01:00
Stian Thorgersen caec65c576 Merge pull request #2241 from mstruk/KEYCLOAK-2485
KEYCLOAK-2485 local description is missing in jboss as7/eap adapter
2016-02-18 16:58:11 +00:00
Stian Thorgersen ebb030c3bd Merge pull request #2240 from stianst/KEYCLOAK-2484
KEYCLOAK-2484
2016-02-18 16:57:22 +00:00
Stian Thorgersen f88908fa18 Merge pull request #2239 from mstruk/KEYCLOAK-2483
KEYCLOAK-2483 Modules are in wrong location
2016-02-18 15:55:58 +00:00
Marko Strukelj cb2aa547f9 KEYCLOAK-2485 local description is missing in jboss as7/eap adapter 2016-02-18 16:51:40 +01:00
Stian Thorgersen d386920b58 KEYCLOAK-2484
Update to new logo
2016-02-18 16:47:26 +01:00
Marko Strukelj 75d74890ca KEYCLOAK-2483 Modules are in wrong location 2016-02-18 15:41:57 +01:00
Bill Burke fd49213cb9 KEYCLOAK-2477 2016-02-17 17:02:14 -05:00
Bill Burke b20031faed Merge pull request #2228 from patriot1burke/master
make RealmModel unmodifiable collections
2016-02-17 16:58:49 -05:00
Bill Burke acf2d662c2 remove RealmModel.getClientNameMap() 2016-02-17 16:09:25 -05:00
Bill Burke 20348e5d0b remove RealmModel.getClientNameMap() 2016-02-17 16:05:25 -05:00
Bill Burke 3143a2e500 unmodifiable complete 2016-02-17 15:43:03 -05:00
Bill Burke d731189236 Merge remote-tracking branch 'upstream/master' 2016-02-17 14:57:38 -05:00
Lukas Kubik d22f4cb08c Update parent poms 2016-02-17 16:35:29 +00:00
Stian Thorgersen 98fe7c04a9 Merge pull request #2235 from pdrozd/KEYCLOAK-2498
KEYCLOAK-2498 - Fix assertion on page content.
2016-02-17 16:00:09 +00:00
Bill Burke 69c3d38164 Merge pull request #2236 from pedroigor/KEYCLOAK-2497
[KEYCLOAK-2497] - Prevent inserting malicious SAML assertion
2016-02-17 09:38:39 -05:00
Pedro Igor f7ba306016 [KEYCLOAK-2497] - Prevent inserting malicious SAML assertion 2016-02-17 11:51:58 -02:00
Pavel Drozd 38e4ad15d5 KEYCLOAK-2498 - Fix assertion on page content. 2016-02-17 14:35:41 +01:00
Marek Posolda c4144dd884 Merge pull request #2234 from mposolda/master
KEYCLOAK-2412 KEYCLOAK-2495 cluster fixes and improvements
2016-02-17 13:57:13 +01:00
mposolda e237bcd383 KEYCLOAK-2412 wildfly configs and polishing 2016-02-17 13:10:51 +01:00
mposolda f52f998bcd KEYCLOAK-2495 Improve startup time with many offlineSessions in UserSessionPersister 2016-02-17 11:02:42 +01:00
mposolda 1328531f31 KEYCLOAK-2412 Added ClusterProvider. Avoid concurrent federation sync execution by more cluster nodes at the same time.
Clustering - more progress
2016-02-17 11:02:42 +01:00
mposolda 61f2baf65e KEYCLOAK-2412 Test for concurrent federation sync in cluster 2016-02-17 11:02:42 +01:00
Stian Thorgersen 7841c5f07b Merge pull request #2232 from abstractj/cli-registration-parent
Fixes the parent for Keycloak client registration cli module
2016-02-17 07:45:15 +00:00
Stian Thorgersen 7f60e4f986 Merge pull request #2231 from stianst/master
KEYCLOAK-2493
2016-02-17 07:41:44 +00:00
Stian Thorgersen 181b329faf Merge pull request #2230 from tkyjovsk/cluster-testing
Cluster testing - updates
2016-02-17 07:41:35 +00:00
Stian Thorgersen 6d2eeb7cd6 Merge pull request #2227 from mhajas/master
Fix SAML adapter tests
2016-02-17 07:39:28 +00:00
Stian Thorgersen 5df540df8c Merge pull request #2223 from ssilvert/partial-import-tests
KEYCLOAK-2481: Create admin client endpoint for partial import + tests
2016-02-17 07:39:03 +00:00
Stian Thorgersen a8ea2ef5d5 Merge pull request #2221 from mstruk/admin-client
Move event and authentication tests under org/keycloak/teststuite/admin
2016-02-17 07:38:26 +00:00
Tomas Kyjovsky 65a840be3d KEYCLOAK-1678 added invalidation tests for groups and roles, added mroe update tests for realm 2016-02-16 18:57:12 +01:00
Bruno Oliveira f3752f804f Fixes the parent for Keycloak client registration cli module 2016-02-16 15:33:49 -02:00
Stian Thorgersen 5bc3ee0e8c KEYCLOAK-2493
Set default theme based on product name
2016-02-16 18:05:06 +01:00
Tomas Kyjovsky acf8549d51 KEYCLOAK-1678 generalized invalidation tests, added test for users and clients 2016-02-16 05:49:43 +01:00
Tomas Kyjovsky fa3c0bb0aa KEYCLOAK-1678 generalized cluster tests for any number of backend nodes 2016-02-15 23:58:50 +01:00
Tomas Kyjovsky 9fd9a1a5ad KEYCLOAK-1678 customizable server outputs to console 2016-02-15 23:56:44 +01:00
Tomas Kyjovsky cbdf30b549 KEYCLOAK-1678 parametrized ispn cache owners 2016-02-15 23:46:49 +01:00
Bill Burke c9cc189602 make RealmModel unmodifiable collections 2016-02-12 16:28:07 -05:00
Bill Burke 328e1a0cd8 Merge pull request #2224 from patriot1burke/master
cache fixes, optimzations, stress test framework
2016-02-12 12:33:55 -05:00
Bill Burke 24da8288eb Merge remote-tracking branch 'upstream/master' 2016-02-12 11:38:36 -05:00
Bill Burke 4ff1848681 javadoc 2016-02-12 11:38:12 -05:00
mhajas 474043b688 Merge remote-tracking branch 'upstream/master' 2016-02-12 16:10:03 +01:00
mhajas 7c64ab228b Fix SAML adapter tests 2016-02-12 16:05:23 +01:00
Marek Posolda a25658fb31 Merge pull request #2226 from mposolda/master
KEYCLOAK-1989 Refreshing offline tokens didn't work correctly in clus…
2016-02-12 13:32:21 +01:00
mposolda 969b8c153f KEYCLOAK-1989 Refreshing offline tokens didn't work correctly in cluster with revokeRefreshToken enabled 2016-02-12 12:54:47 +01:00
Stian Thorgersen b0dd65c706 Merge pull request #2216 from jean-merelis/master
Angular2 example
2016-02-12 11:06:00 +01:00
Marek Posolda 57eefca4a0 Merge pull request #2225 from mposolda/master
Fix MySQL
2016-02-12 09:47:37 +01:00
mposolda 132044bcb1 Support for add big number of users in batches 2016-02-12 09:06:35 +01:00
mposolda e880a768c5 Fix MySQL 2016-02-12 09:06:12 +01:00
Bill Burke 860a104828 stress testing 2016-02-12 00:30:36 -05:00
Bill Burke bddf214bc0 test 2016-02-11 22:09:58 -05:00
Bill Burke d79a7146ba fix cache 2016-02-11 22:01:54 -05:00
Stan Silvert 17e09a557b Fix conflict. 2016-02-11 15:38:58 -05:00
Stan Silvert dd9cf3be39 KEYCLOAK-2481: Create admin client endpoint for partial endpoint + tests 2016-02-11 15:26:52 -05:00
Marek Posolda 3bd6974ccb Merge pull request #2222 from mposolda/master
Fix Kerberos test broken in some environments
2016-02-11 17:26:23 +01:00
mposolda fee1f6f61a Fix Kerberos test broken in some environments 2016-02-11 16:49:21 +01:00
Marko Strukelj 92f5f8f5cd Move event and authentication tests under org/keycloak/teststuite/admin 2016-02-11 16:48:35 +01:00
Marek Posolda b234db4b34 Merge pull request #2220 from mposolda/master
KEYCLOAK-2436 Better defaults
2016-02-11 16:21:42 +01:00
mposolda 6c39810ba7 KEYCLOAK-2436 Better defaults 2016-02-11 15:50:11 +01:00
Bill Burke c2fa0e5c6d Merge pull request #2214 from mposolda/master
KEYCLOAK-2463 Fix performance issue with just 2 default connections p…
2016-02-11 09:41:48 -05:00
Bill Burke 67ce3fdbd2 Merge pull request #2215 from patriot1burke/master
concurrency, some JPA cleanup too
2016-02-11 09:41:37 -05:00
Stian Thorgersen 49d0b72c74 Merge pull request #2218 from mstruk/admin-client
KEYCLOAK-1967 Add support for authentication flows into admin-rest-client
2016-02-11 15:34:24 +01:00
Bill Burke 018c44ef2c conflicts 2016-02-11 08:43:29 -05:00
Marko Strukelj dadb470609 KEYCLOAK-1967 Add support for authentication flows into admin-rest-client 2016-02-11 12:18:01 +01:00
Stian Thorgersen a4ce389bf5 Merge pull request #2217 from stianst/master
Revert back to servlet 3.0
2016-02-11 10:02:54 +01:00
Stian Thorgersen c2a601dc04 Merge pull request #2213 from mstruk/npe
KEYCLOAK-2461 NPE when deploying an .ear
2016-02-11 09:25:25 +01:00
Stian Thorgersen 4ea586ebe6 Revert back to servlet 3.0 2016-02-11 09:09:39 +01:00
Jean Merelis 94c71aa59c fix link to angular2-product 2016-02-11 02:03:29 -02:00
Jean Merelis bc514fd308 added instructions for install and transpile angular2 2016-02-11 01:59:45 -02:00
Jean Merelis 71cfa11d2f cleanup angular2-product example 2016-02-11 01:46:31 -02:00
Jean Merelis 5e9f3b32fc add angular2-product example 2016-02-11 00:53:03 -02:00
Jean Merelis fd48d4335a add client in testream for angular2-product example 2016-02-11 00:48:05 -02:00
Bill Burke 8bf9ea838a remove some @JoinTables 2016-02-10 21:32:44 -05:00
Bill Burke f2bd50335a errors 2016-02-10 20:47:27 -05:00
Bill Burke e714d4f724 filter needs to be backward compatible 2016-02-10 14:55:18 -05:00
Bill Burke fd212a2a2a Merge remote-tracking branch 'upstream/master' 2016-02-10 14:09:43 -05:00
Bill Burke 84949bb51f concurrency 2016-02-10 14:09:29 -05:00
mposolda aac274bbb3 KEYCLOAK-2463 Fix performance issue with just 2 default connections per route in Apache HTTP client 2016-02-10 18:07:11 +01:00
Marko Strukelj 94da1dfc13 KEYCLOAK-2461 NPE when deploying an .ear 2016-02-10 16:13:46 +01:00
Stian Thorgersen 066d6bb230 Merge pull request #2211 from stianst/KEYCLOAK-2475
KEYCLOAK-2475
2016-02-10 14:52:22 +01:00
Stian Thorgersen 72ded04517 Merge pull request #2210 from stianst/KEYCLOAK-2466
KEYCLOAK-2466 Redirection back to account/password is broken
2016-02-10 14:44:54 +01:00
Stian Thorgersen 77912b2117 KEYCLOAK-2475
Move client registration endpoints
2016-02-10 14:23:04 +01:00
Stian Thorgersen dcb5ef4fd8 Merge pull request #2201 from tkyjovsk/cluster-testing
KEYCLOAK-1678 fixed containers setup & TwoNodeClusterTest
2016-02-10 14:07:51 +01:00
Stian Thorgersen d6acf2496a Merge pull request #2209 from stianst/KEYCLOAK-2472
KEYCLOAK-2472
2016-02-10 14:04:19 +01:00
Stian Thorgersen 555236c3f0 KEYCLOAK-2466 Redirection back to account/password is broken 2016-02-10 14:02:33 +01:00
Stian Thorgersen 4670d93f76 KEYCLOAK-2472
Remove deprecated endpoints
2016-02-10 13:32:53 +01:00
Stian Thorgersen 8ed1677249 Merge pull request #2188 from ahus1/logout_should_keep_fragement_KEYCLOAK-2323
Don't encode URL fragment for logout URL / KEYCLOAK-2323
2016-02-10 13:16:51 +01:00
Marek Posolda cf7a194ea3 Merge pull request #2208 from mposolda/master
KEYCLOAK-2470 Upgrade Apache HTTP Client to wildfly 10.0.0.Final alig…
2016-02-10 11:24:53 +01:00
mposolda eae36ac2c0 KEYCLOAK-2470 Upgrade Apache HTTP Client to wildfly 10.0.0.Final aligned version 2016-02-10 11:00:40 +01:00
Stian Thorgersen 6f56d006fc Merge pull request #2207 from stianst/KEYCLOAK-2303
KEYCLOAK-2303 Update Hibernate
2016-02-10 10:58:08 +01:00
Stian Thorgersen 633eb842a3 KEYCLOAK-2303 Update Hibernate 2016-02-10 10:07:56 +01:00
Stian Thorgersen 11b7e62e58 Merge pull request #2205 from stianst/KEYCLOAK-2303
KEYCLOAK-2303
2016-02-10 10:07:22 +01:00
Stian Thorgersen bb77c717c9 KEYCLOAK-2303
Update dependency versions to align with WildFly 10
2016-02-10 09:07:06 +01:00
Bill Burke 0b54838f31 concurrency 2016-02-09 22:13:55 -05:00
Bill Burke 45e5cfac99 concurrency 2 2016-02-09 21:10:30 -05:00
Marek Posolda 03b8839abe Merge pull request #2203 from mposolda/master
Support for bulk adding of users in testsuite CLI
2016-02-09 21:22:36 +01:00
mposolda 4dffc3cf7e Support for bulk adding of users in testsuite CLI 2016-02-09 21:20:05 +01:00
Tomas Kyjovsky ef77e2a246 KEYCLOAK-1678 added SessionFailoverClusterTest 2016-02-09 19:30:02 +01:00
Tomas Kyjovsky 620ca86d45 KEYCLOAK-1678 updated README with some info about cluster tests 2016-02-09 19:29:03 +01:00
Bill Burke 1c97b9c41d Merge remote-tracking branch 'upstream/master' 2016-02-09 12:26:11 -05:00
Bill Burke 347cdcbb28 concurrency 2016-02-09 12:25:48 -05:00
Tomas Kyjovsky 590ad1a7ca KEYCLOAK-1678 fixed TwoNodeClusterTest 2016-02-09 16:36:00 +01:00
Tomas Kyjovsky fd327bb225 KEYCLOAK-1678 fixed cluster containers setup (-Djava.net.preferIPv4Stack=true is needed for cluster to form) 2016-02-09 16:35:40 +01:00
Bill Burke 00236c13ff Merge pull request #2180 from cainj13/persistentWildcard
add support for wildcard persistent nameId attribute to SAML protocol
2016-02-09 09:43:30 -05:00
Stian Thorgersen cd9d67037c Merge pull request #2200 from gtudan/KEYCLOAK-2468
KEYCLOAK-2468: Update bcprov to 1.52
2016-02-09 13:31:50 +01:00
Gregor Tudan 50a2c1d0ed Use bouncy-castle version 1.52 (as provided by wildfly) 2016-02-09 10:34:35 +01:00
Stian Thorgersen 3ecdc9506e Merge pull request #2199 from stianst/KEYCLOAK-2425
KEYCLOAK-2425
2016-02-09 09:57:53 +01:00
Stian Thorgersen c4df7f7674 Merge pull request #2196 from stianst/KEYCLOAK-2434
KEYCLOAK-2434
2016-02-09 09:57:38 +01:00
Stian Thorgersen 98f9f94cab Merge pull request #2198 from tkyjovsk/cluster-testing
KEYCLOAK-1678 Initial 2-node cluster test
2016-02-09 09:05:39 +01:00
Stian Thorgersen cc7f755fe9 KEYCLOAK-2425
Replacing SNAPSHOT with timestamp in /auth/resources/<VERSION> path doesn't work well with load balancing
2016-02-09 09:03:25 +01:00
Stian Thorgersen 528e3127e6 KEYCLOAK-2434
BasicAuthRequestAuthenticator ignores HttpClientBuilder configuration
2016-02-09 08:41:35 +01:00
Stian Thorgersen 5ff266b148 Merge pull request #2197 from abstractj/KEYCLOAK-2452
Server Cache documentation is out of date
2016-02-09 08:30:36 +01:00
Tomas Kyjovsky 655a5a1401 KEYCLOAK-1678 Enabled exclusion pattern for cluster test by default. 2016-02-09 05:29:20 +01:00
Tomas Kyjovsky 4a8b19cfce KEYCLOAK-1678 Added initial cluster test for 2-node cluster. 2016-02-09 05:21:11 +01:00
Tomas Kyjovsky db25a81d23 KEYCLOAK-1678 Added module for building wildfly mod_cluster load balancer. 2016-02-09 05:20:19 +01:00
Tomas Kyjovsky 28fa2b92d9 Merge upstream-master into cluster-testing 2016-02-08 23:53:30 +01:00
Bruno Oliveira 3b6f26b2ec Server Cache documentation is out of date 2016-02-08 22:23:31 +01:00
Stian Thorgersen 155a2d687b Merge pull request #2195 from stianst/KEYCLOAK-2429
KEYCLOAK-2429
2016-02-08 20:33:25 +01:00
Stian Thorgersen cf94411aaa Merge pull request #2194 from stianst/KEYCLOAK-2426
KEYCLOAK-2426
2016-02-08 20:32:57 +01:00
Stian Thorgersen e5447f7f1e Merge pull request #2193 from stianst/KEYCLOAK-2455
KEYCLOAK-2455
2016-02-08 20:32:41 +01:00
Bill Burke 02b9d5ee13 Merge pull request #2191 from patriot1burke/master
hashcode/equals on all entities/adapters
2016-02-08 14:32:37 -05:00
Stian Thorgersen 635ccae144 KEYCLOAK-2429
Disabled Google Identity Provider still kicks in when 'Authenticate by default' is enabled
2016-02-08 19:51:21 +01:00
Stian Thorgersen d8779a3d01 KEYCLOAK-2426
No visible link for users with 'manage-users' role
2016-02-08 19:47:02 +01:00
Stian Thorgersen ec20c004ba KEYCLOAK-2455
Typo in cached ClientTemplateAdapter
2016-02-08 19:40:42 +01:00
Stian Thorgersen 5f41215e27 Merge pull request #2192 from stianst/master
KEYCLOAK-2450
2016-02-08 19:39:38 +01:00
Stian Thorgersen 98bd0b003e KEYCLOAK-2450
WildFly adapter script should support offline installation of adapter
2016-02-08 19:39:15 +01:00
Stian Thorgersen f28f87b050 Merge pull request #2189 from stianst/master
KEYCLOAK-2430 Load resource bundle before bootstrapping Angular
2016-02-08 19:20:16 +01:00
Bill Burke ffc0e4f005 hashcode/equals on all entities/adapters 2016-02-08 12:20:14 -05:00
Tomas Kyjovsky a275a24797 Added auth-server-wildfly-cluster profile. 2016-02-08 16:12:47 +01:00
Stian Thorgersen fd0d30fd1a KEYCLOAK-2430 Load resource bundle before bootstrapping Angular 2016-02-08 11:49:41 +01:00
Stian Thorgersen fb07559980 Merge pull request #2186 from vmuzikar/master
Fix Adapter Tests dependencies
2016-02-08 10:13:46 +01:00
Stian Thorgersen 8128d23059 Merge pull request #2184 from mhajas/KEYCLOAK-2391
KEYCLOAK-2391 history of resource access test
2016-02-08 10:13:35 +01:00
Stian Thorgersen 4c7f686505 Merge pull request #2182 from tkyjovsk/container-handling
Changes to container handling in arquillian testsuite, updated README
2016-02-08 10:12:45 +01:00
Stian Thorgersen 8ebf6a650f Merge pull request #2187 from ssilvert/admin-endpoint-tests
KEYCLOAK-1976: Add support for events into admin-rest-client + tests
2016-02-08 08:51:55 +01:00
Tomas Kyjovsky 1c792ad769 Merge container-handling into cluster-testing 2016-02-07 21:37:13 +01:00
Tomas Kyjovsky 1752ac8e63 Refactoring of auth-server-* and auth server migration Maven profiles 2016-02-07 21:30:54 +01:00
Tomas Kyjovsky 8f32e1b554 Adapter tests: updated artifactId of saml-post-signatures example to sales-post-sig 2016-02-07 21:28:25 +01:00
Tomas Kyjovsky 89250a69fb KEYCLOAK-1678: H2TestEnricher for running H2 server instance during integration tests. 2016-02-07 19:39:30 +01:00
Tomas Kyjovsky a264c15886 KEYCLOAK-1678: Configuration of remote (tcp) H2 datasource for wildfly. 2016-02-07 19:38:40 +01:00
Tomas Kyjovsky 96a00317b8 Merge container-handling into cluster-testing 2016-02-07 19:19:39 +01:00
Stan Silvert 228b24a1c5 Fix it right this time. (Hard to tell for sure since I can't reproduce
locally)
2016-02-06 14:43:18 -05:00
Stan Silvert d7295473c3 Fix failure when tests are run in a different order. 2016-02-06 14:34:03 -05:00
Alexander Schwartz 01083d21d0 Don't encode URL fragment for logout URL / KEYCLOAK-2323 2016-02-06 17:43:38 +01:00
mhajas be59e2419c KEYCLOAK-2391 history of resource access tests 2016-02-06 09:17:55 +01:00
Stan Silvert e89f511465 KEYCLOAK-1976: Add support for events into admin-rest-client. Also,
arquillian tests for events.
2016-02-05 18:45:25 -05:00
Josh Cain 66cec589f7 add docbook info on how NameID is calculated 2016-02-05 11:22:10 -06:00
mhajas e3d64f301d KEYCLOAK-2428 Log also other accesses 2016-02-05 11:22:10 -06:00
Stian Thorgersen ca841abe9b KEYCLOAK-2458 Added initial concurrency test for admin endpoints 2016-02-05 11:22:09 -06:00
Bill Burke 726f746b85 KEYCLOAK-2367 2016-02-05 11:22:09 -06:00
Stian Thorgersen 192987bad5 Bump version to 1.9.0.Final-SNAPSHOT 2016-02-05 11:22:09 -06:00
Vaclav Muzikar b4a2559ac5 KEYCLOAK-2451 Add Internationalization test 2016-02-05 11:22:09 -06:00
Bill Burke 23e5357870 Merge pull request #2185 from mhajas/KEYCLOAK-2428
KEYCLOAK-2428 Log also other accesses on adapter
2016-02-05 10:37:37 -05:00
Stian Thorgersen 9c1f084dbc Merge pull request #2183 from stianst/master
KEYCLOAK-2458 Added initial concurrency test for admin endpoints
2016-02-05 12:17:20 +01:00
Vaclav Muzikar 94dbeb9c8d Fix Adapter Tests dependencies 2016-02-05 12:10:19 +01:00
mhajas 8a8552822a KEYCLOAK-2428 Log also other accesses 2016-02-05 11:56:05 +01:00
Stian Thorgersen 1c0f1b4e60 Merge pull request #2181 from patriot1burke/master
KEYCLOAK-2367
2016-02-05 10:50:27 +01:00
Stian Thorgersen d12119a089 KEYCLOAK-2458 Added initial concurrency test for admin endpoints 2016-02-05 10:35:56 +01:00
Tomas Kyjovsky dfeb35b5e6 Updated Arquillian testsuite README / UI Testing. 2016-02-05 04:16:01 +01:00
Tomas Kyjovsky 585f1035f9 Updated Arquillian testsuite README. 2016-02-05 03:54:22 +01:00
Tomas Kyjovsky 64212fc9a2 Merge upstream-master into container-handling 2016-02-05 01:31:02 +01:00
Tomas Kyjovsky 191d03f5f3 minor edits 2016-02-05 01:29:53 +01:00
Tomas Kyjovsky 58084d5ee5 KEYCLOAK-1678 Fixed app-server containers' handling. 2016-02-05 01:07:40 +01:00
Bill Burke c63ef3c825 Merge remote-tracking branch 'upstream/master' 2016-02-04 16:50:16 -05:00
Bill Burke e26ac0983a KEYCLOAK-2367 2016-02-04 16:50:02 -05:00
Tomas Kyjovsky 3a51b3530d KEYCLOAK-1678 Reorganized containers handling. (WIP: adapter-libs installation via CLI doesn't work) 2016-02-04 20:24:58 +01:00
Josh Cain d5d954e80a add support for wildcard persistent nameId attribute to SAML protocol 2016-02-04 11:06:14 -06:00
Stian Thorgersen d8d96e5ec1 Merge pull request #2177 from vmuzikar/master
KEYCLOAK-2451 Add Internationalization test
2016-02-04 16:35:24 +01:00
Stian Thorgersen b32365aa12 Merge pull request #2179 from stianst/master
Bump version to 1.9.0.Final-SNAPSHOT
2016-02-04 16:35:04 +01:00
Stian Thorgersen 579ab56a5a Bump version to 1.9.0.Final-SNAPSHOT 2016-02-04 15:55:11 +01:00
Vaclav Muzikar 9e8a33710f KEYCLOAK-2451 Add Internationalization test 2016-02-04 12:48:06 +01:00
Stian Thorgersen affe6ef229 Merge pull request #2176 from stianst/master
KEYCLOAK-2446
2016-02-04 10:12:55 +01:00
Stian Thorgersen 19b1190185 Merge pull request #2175 from pdrozd/KEYCLOAK-2445
KEYCLOAK-2445 - Added ssl profile to eap7 server and adapter.
2016-02-04 09:55:22 +01:00
Stian Thorgersen 040b32ead7 KEYCLOAK-2446
Cordova not working
2016-02-04 09:47:25 +01:00
Stian Thorgersen 989e2dcc11 Merge pull request #2174 from stianst/master
Fix provider examples
2016-02-04 09:18:09 +01:00
Stian Thorgersen ca38602cfe Fix provider examples 2016-02-04 09:17:44 +01:00
Marek Posolda 39379a8129 Merge pull request #2173 from mposolda/master
Docs update: Fix typo and update list of supported databases
2016-02-04 09:15:31 +01:00
mposolda 9fee1275e3 Docs update: Fix typo and update list of supported databases 2016-02-04 09:14:37 +01:00
Pavel Drozd 9adbd370c2 KEYCLOAK-2445 - Added ssl profile to eap7 server and adapter. 2016-02-04 09:10:41 +01:00
Stian Thorgersen 8931be5e61 Merge pull request #2171 from abstractj/basic-example-documentation
Fix the documentation mismatch at basic auth
2016-02-04 07:56:01 +01:00
Bill Burke 461d766f7d Merge pull request #2172 from patriot1burke/master
KEYCLOAK-2444  	KEYCLOAK-2443
2016-02-03 18:21:31 -05:00
Bill Burke 75c88999d8 Merge remote-tracking branch 'upstream/master' 2016-02-03 17:32:00 -05:00
Bill Burke c4c99d5f81 KEYCLOAK-2443 2016-02-03 17:31:50 -05:00
Bill Burke a899d86ac0 KEYCLOAK-2444 2016-02-03 16:43:29 -05:00
Bruno Oliveira 524c809c82 Fix the documentation mismatch at basic auth 2016-02-03 15:13:50 -02:00
Stian Thorgersen eae52a563c Merge pull request #2169 from stianst/master
KEYCLOAK-2441
2016-02-03 16:53:14 +01:00
Marek Posolda a25e8c337e Merge pull request #2170 from mposolda/master
Fix fuse packaging and example
2016-02-03 16:42:24 +01:00
mposolda a707aa945f Fix fuse packaging and example 2016-02-03 16:09:06 +01:00
Stian Thorgersen 1bcc305392 Remove eap6 overlay from downloads bundle 2016-02-03 15:40:38 +01:00
Stian Thorgersen fc1914e53d Merge pull request #2168 from stianst/master
KEYCLOAK-2440 Disable migration tests as they are causing problems bu…
2016-02-03 15:40:23 +01:00
Stian Thorgersen 76ca4e6475 KEYCLOAK-2441
Authenticator example doesn't work
2016-02-03 15:40:09 +01:00
Stian Thorgersen 7277df2bb5 Merge pull request #2167 from mstruk/ose-sni-master
KEYCLOAK-2439 Client adapter fails to set SNI field during TLS handshake
2016-02-03 15:17:54 +01:00
Stian Thorgersen 1d98d5db6d KEYCLOAK-2440 Disable migration tests as they are causing problems building release 2016-02-03 15:04:25 +01:00
Stian Thorgersen 337f390090 Merge pull request #2165 from stianst/master
KEYCLOAK-2435
2016-02-03 14:54:42 +01:00
Marko Strukelj 683487aafe KEYCLOAK-2439 Client adapter fails to set SNI field during TLS handshake 2016-02-03 14:47:19 +01:00
Stian Thorgersen 136c797813 KEYCLOAK-2436
Account exists page shows to primary buttons
2016-02-03 14:20:40 +01:00
Stian Thorgersen 2974034974 KEYCLOAK-2435
Feedback on login screen not showing correctly
2016-02-03 13:41:31 +01:00
Stian Thorgersen adfc93cfc9 Merge pull request #2164 from mposolda/master
Fix failing test with DB2
2016-02-03 13:04:57 +01:00
Stian Thorgersen b52ac0fbfb Merge pull request #2163 from stianst/master
KEYCLOAK-2433
2016-02-03 13:04:24 +01:00
mposolda bae3ce4aab Fix failing test with DB2 2016-02-03 12:29:37 +01:00
Stian Thorgersen 60872dd8dd KEYCLOAK-2433
ClassNotFoundException: javax.ws.rs.core.Response from Module 'org.keycloak.keycloak-server-spi:main'
2016-02-03 12:25:31 +01:00
Stian Thorgersen 60f9f73c4c Merge pull request #2162 from stianst/master
KEYCLOAK-1524
2016-02-03 11:49:43 +01:00
Stian Thorgersen c7a8742a36 KEYCLOAK-1524
Source code headers
2016-02-03 11:20:22 +01:00
Stian Thorgersen c9c590d1cf Merge pull request #2161 from mposolda/master
KEYCLOAK-2431 Ensure users removed through UserManager to properly in…
2016-02-03 10:53:51 +01:00
Stian Thorgersen bdc0977a0e Merge pull request #2152 from vramik/KEYCLOAK-2423
KEYCLOAK-2423: Update arquillian testsuite for eap7
2016-02-03 10:53:25 +01:00
Stian Thorgersen 1a31c3af15 Merge pull request #2125 from mhajas/mellon
KEYCLOAK-2405 mod_auth_mellon test + docker image
2016-02-03 10:21:27 +01:00
mposolda db76655717 KEYCLOAK-2431 Ensure users removed through UserManager to properly invoke callbacks. Make UserSessionPersister implementations more resistent when user was not properly removed 2016-02-03 10:16:39 +01:00
Stian Thorgersen 1edbf96cae Merge pull request #2160 from stianst/master
KEYCLOAK-2299
2016-02-03 10:13:24 +01:00
Stian Thorgersen 26897ea46d KEYCLOAK-2299
createdDate of credential is not exported
2016-02-03 09:49:10 +01:00
Bill Burke c68a78bd31 Merge pull request #2159 from patriot1burke/master
filter examples, subsystem dependencies
2016-02-02 19:51:00 -05:00
Bill Burke ec9b9879e8 filter examples, subsystem dependencies 2016-02-02 19:15:05 -05:00
Bill Burke 11eaf0d731 Merge pull request #2157 from mposolda/master
KEYCLOAK-2404 Fix migration issue on postgres from 1.6.0
2016-02-02 14:06:56 -05:00
Bill Burke 2934cb108f Merge pull request #2158 from patriot1burke/master
KEYCLOAK-2297
2016-02-02 14:06:17 -05:00
Bill Burke 84bc19ff87 Merge remote-tracking branch 'upstream/master' 2016-02-02 12:28:59 -05:00
Bill Burke d0b17a0aea KEYCLOAK-2297 2016-02-02 12:28:50 -05:00
Bill Burke 057e049bde Merge pull request #2156 from patriot1burke/master
KEYCLOAK-2220
2016-02-02 11:29:21 -05:00
mposolda 8838486df6 KEYCLOAK-2404 Fix migration issue on postgres from 1.6.0 2016-02-02 17:05:54 +01:00
Bill Burke e2287188a8 Merge remote-tracking branch 'upstream/master' 2016-02-02 09:50:21 -05:00
Bill Burke 0f63a5063b KEYCLOAK-2220 2016-02-02 09:46:28 -05:00
Bill Burke 0d842f47a7 Merge pull request #2155 from stianst/KEYCLOAK-2424
KEYCLOAK-2424 Add delete role button to client role list
2016-02-02 09:34:40 -05:00
Bill Burke 40fee55474 Merge pull request #2154 from mposolda/master
KEYCLOAK-1506 Mysql warning at startup
2016-02-02 09:34:33 -05:00
Bill Burke d1a4221ce6 Merge pull request #2153 from stianst/master
KEYCLOAK-2420
2016-02-02 09:34:24 -05:00
Stian Thorgersen 6c106dc681 KEYCLOAK-2424 Add delete role button to client role list 2016-02-02 14:32:58 +01:00
mposolda 958c379688 KEYCLOAK-1506 Mysql warning at startup 2016-02-02 14:28:34 +01:00
Stian Thorgersen 26264ec042 KEYCLOAK-2420
Export client
2016-02-02 14:24:52 +01:00
Stian Thorgersen 00e50111b1 Merge pull request #2151 from stianst/master
KEYCLOAK-1774
2016-02-02 11:37:43 +01:00
Vlasta Ramik 8e49d4ff90 Update arquillian testsuite for eap7 2016-02-02 11:05:35 +01:00
Stian Thorgersen 747d110da0 KEYCLOAK-2421
Remove aesh module from server feature pack
2016-02-02 10:54:54 +01:00
Stian Thorgersen af9e995412 KEYCLOAK-1774
Upgrade to WildFly 10.0.0.Final
2016-02-02 10:36:11 +01:00
Bill Burke b0f548f3cb Merge pull request #2149 from patriot1burke/master
KEYCLOAK-2408 KEYCLOAK-2330
2016-02-01 17:14:15 -05:00
Bill Burke c65160db1f Merge remote-tracking branch 'upstream/master' 2016-02-01 16:35:12 -05:00
Bill Burke 37cf335247 KEYCLOAK-2408 KEYCLOAK-2330 2016-02-01 16:35:00 -05:00
Marek Posolda 8ad8a3fbac Merge pull request #2148 from mposolda/master
KEYCLOAK-2235 Fix possible transaction leak at startup with add-user
2016-02-01 22:23:43 +01:00
Bill Burke bd104e2138 Merge pull request #2137 from abstractj/KEYCLOAK-2411
Realm import will raise NPE when clientID is missing
2016-02-01 16:03:17 -05:00
mposolda 6b2fb9a2bb KEYCLOAK-2235 Fix possible transaction leak at startup with add-user 2016-02-01 21:47:46 +01:00
Bill Burke c5b0bb64f7 Merge pull request #2146 from patriot1burke/master
saml subsystem as7 backport
2016-02-01 14:58:19 -05:00
Bill Burke f660e4e757 Merge pull request #2147 from mposolda/master
KEYCLOAK-2235 Fix transaction leaks
2016-02-01 14:58:10 -05:00
mposolda 732256eceb KEYCLOAK-2235 Fix transaction leaks 2016-02-01 18:21:27 +01:00
Bill Burke 9bc5a4592c fix 2016-02-01 10:39:00 -05:00
Bill Burke 4ba77a15a0 Merge remote-tracking branch 'upstream/master' 2016-02-01 10:36:45 -05:00
Bill Burke 66f4921227 saml subsystem as7 backport 2016-02-01 10:36:25 -05:00
Stian Thorgersen 77a7b5a130 Merge pull request #2116 from mstruk/KEYCLOAK-2315
KEYCLOAK-2315 Remove jboss-earlyaccess-repository repository
2016-02-01 15:26:26 +01:00
Marek Posolda dab7f617d4 Merge pull request #2144 from mposolda/master
KEYCLOAK-330 Fix failing test with DB2
2016-02-01 10:57:44 +01:00
mposolda f268170aa9 KEYCLOAK-330 Fix failing test with DB2 2016-02-01 10:57:04 +01:00
Bill Burke db78ea76b8 Merge pull request #2142 from patriot1burke/master
saml subsystem model changes
2016-01-30 08:40:10 -05:00
Bill Burke dede702b65 Merge pull request #2140 from vmuzikar/master
KEYCLOAK-2415 Add disabledClient test
2016-01-30 07:20:26 -05:00
Bill Burke 6c020661e8 saml subsystem model changes 2016-01-30 07:13:13 -05:00
Marek Posolda 1d023056e9 Merge pull request #2141 from mposolda/master
KEYCLOAK-2292 Broker login: remove identity provider prefix from auto…
2016-01-29 21:15:54 +01:00
mposolda 9332655110 KEYCLOAK-2292 Broker login: remove identity provider prefix from autogenerated username 2016-01-29 18:43:12 +01:00
Marek Posolda 61c838955e Merge pull request #2139 from mposolda/master
KEYCLOAK-330 IBM DB2 support
2016-01-29 18:43:01 +01:00
Vaclav Muzikar bd6f2a3e2d KEYCLOAK-2415 Add disabledClient test 2016-01-29 18:19:30 +01:00
Vaclav Muzikar b930ef4b1b KEYCLOAK-2414 Fix ClientSettingsTest 2016-01-29 18:18:51 +01:00
mposolda dcebc453df KEYCLOAK-330 IBM DB2 support 2016-01-29 17:43:11 +01:00
Bill Burke 5959d5cbf3 Merge pull request #2130 from ssilvert/partial-import-description
KEYCLOAK-2335: Document Partial Import in Admin Console
2016-01-29 09:34:39 -05:00
Bill Burke 39f12549a3 Merge pull request #2122 from abstractj/KEYCLOAK-2151
Brute force detector active for non-existing accounts
2016-01-29 09:32:28 -05:00
Bill Burke 16cb4eca0c Merge pull request #2136 from mhajas/my-prod-branch
Fix adapter tests
2016-01-29 09:30:34 -05:00
Bill Burke 8cffbdd581 Merge pull request #2131 from patriot1burke/master
saml adapter needs endpoint
2016-01-29 09:30:04 -05:00
Marek Posolda 366606e6a0 Merge pull request #2138 from mposolda/master
Fix testsuite with Sybase
2016-01-29 15:04:21 +01:00
mposolda f2082d5e24 Fix testsuite with Sybase 2016-01-29 13:30:44 +01:00
Marek Posolda 41551e08b0 Merge pull request #2129 from georgekankava/staging/literal-boolean-values-should-not-be-used-in-condition-expressions-fix-1
squid:S1125 - Literal boolean values should not be used in condition expressions
2016-01-29 13:23:20 +01:00
Marek Posolda a7619f90e2 Merge pull request #2128 from georgekankava/staging/long-suffix-L-should-be-upper-case-fix-1
squid:LowerCaseLongSuffixCheck - Long suffix "L" should be upper case
2016-01-29 13:20:42 +01:00
Bruno Oliveira 5eb8d3be5a Realm import will raise NPE when clientID is missing 2016-01-29 10:05:42 -02:00
mhajas 3e1aef1678 Merge remote-tracking branch 'upstream/master' into my-prod-branch 2016-01-29 12:11:58 +01:00
mhajas ce907bbd15 Fix adapter tests demorealm 2016-01-29 11:48:10 +01:00
Stian Thorgersen c1cdcb424f Merge pull request #2135 from stianst/master
KEYCLOAK-2410
2016-01-29 11:36:05 +01:00
mhajas c5719b4604 Fix SAML tests 2016-01-29 11:23:22 +01:00
Stian Thorgersen 9bd04b18a8 KEYCLOAK-2410
TOTP shows both realm name and display name
2016-01-29 11:01:49 +01:00
Marek Posolda 9f2bd0f55e Merge pull request #2132 from mposolda/master
Fix sybase
2016-01-29 08:38:06 +01:00
mposolda 8ed76c6921 Fix sybase 2016-01-29 08:36:05 +01:00
Bill Burke 34095ef522 docs 2016-01-28 23:28:11 -05:00
Bill Burke a068d83dd8 saml adapter endpoint changes 2016-01-28 22:56:14 -05:00
Stan Silvert 3a2ec809e9 KEYCLOAK-2335: Document Partial Import in Admin Console 2016-01-28 16:56:28 -05:00
George Kankava 92a494359d squid:S1125 - Literal boolean values should not be used in condition expressions 2016-01-29 00:22:47 +04:00
Marek Posolda 02d3993c7f Merge pull request #2127 from mposolda/master
KEYCLOAK-2364 Fix migration with MSSQL
2016-01-28 17:54:48 +01:00
mposolda 6046d15279 KEYCLOAK-2364 Fix migration with MSSQL 2016-01-28 16:39:01 +01:00
Bill Burke fae05c1cc5 Merge pull request #2126 from patriot1burke/master
browser back button
2016-01-28 10:31:14 -05:00
George Kankava e937dda556 squid:LowerCaseLongSuffixCheck - Long suffix "L" should be upper case 2016-01-28 19:06:41 +04:00
Bill Burke 93f85d34a7 Merge remote-tracking branch 'upstream/master' 2016-01-28 09:23:34 -05:00
Bill Burke 6f036ac434 fix tests 2016-01-28 09:23:23 -05:00
mhajas 6b6fb9975f Merge remote-tracking branch 'upstream/master' into mellon 2016-01-28 10:47:34 +01:00
Marek Posolda 1618d9250a Merge pull request #2124 from mposolda/master
KEYCLOAK-1402 Postgresplus 9.4 support
2016-01-28 10:18:14 +01:00
mposolda e1416b658f KEYCLOAK-1402 Postgresplus 9.4 support 2016-01-28 10:12:23 +01:00
mhajas 50f4986dd7 Docker image apache + mod_auth_mellon 2016-01-28 09:54:39 +01:00
mhajas 6c5fb2a4aa Tests for mod_auth_mellon 2016-01-28 09:54:28 +01:00
Bill Burke 9027f9b4d3 fix2 2016-01-27 23:06:20 -05:00
Bill Burke 8a3148017d fix 2016-01-27 23:04:12 -05:00
Bill Burke 5853ae4eff whoops 2016-01-27 22:59:41 -05:00
Bill Burke b37fbd6a2f browser back button 2016-01-27 22:59:08 -05:00
Bill Burke 25347cd45e browser back button 2016-01-27 22:14:28 -05:00
Bruno Oliveira 385717c0fb Brute force detector active for non-existing accounts 2016-01-27 19:09:44 -02:00
Marko Strukelj 5826c034eb KEYCLOAK-2315 Remove jboss-earlyaccess-repository repository 2016-01-27 14:17:25 +01:00
Stian Thorgersen 1b0ccae4ac Merge pull request #2121 from pdrozd/KEYCLOAK-2401-ssl
KEYCLOAK-2401 - add ssl profile and fix urls when ssl profile enabled.
2016-01-27 11:39:06 +01:00
Stian Thorgersen 003ed1e302 Merge pull request #2120 from pdrozd/KEYCLOAK-2400
KEYCLOAK-2400 - adapter installation on windows
2016-01-27 11:38:52 +01:00
Pavel Drozd 09f8d14572 KEYCLOAK-2401 - add ssl profile and fix urls when ssl profile enabled. 2016-01-27 10:06:11 +01:00
Pavel Drozd bf276a833e KEYCLOAK-2400 - changed adapter installation to be able to install it on windows. 2016-01-27 08:34:04 +01:00
Bill Burke 81569ce5d2 Merge pull request #2119 from patriot1burke/master
KEYCLOAK-2349
2016-01-26 16:22:02 -05:00
Bill Burke 527edf8a3b Merge pull request #2115 from mstruk/typo
Fix typo bug introduced during modules refactoring
2016-01-26 16:06:21 -05:00
Bill Burke 66e1ee79d0 KEYCLOAK-2349 2016-01-26 15:45:40 -05:00
Marek Posolda b36a4bee5d Merge pull request #2117 from mposolda/master
KEYCLOAK-2080 Downgrade H2 to 1.3.173, which is version in Wildfly  1…
2016-01-26 21:24:20 +01:00
Bill Burke 9fa35eda69 Merge pull request #2118 from patriot1burke/master
KEYCLOAK-2387
2016-01-26 14:20:27 -05:00
Bill Burke 449bc5c4dc KEYCLOAK-2387 2016-01-26 14:19:53 -05:00
mposolda 526fdd021d KEYCLOAK-2080 Downgrade H2 to 1.3.173, which is version in Wildfly 10.0.0.CR5 2016-01-26 17:59:30 +01:00
Marek Posolda 4baeaded23 Merge pull request #2110 from mposolda/master
KEYCLOAK-2351 Support for response_type=token to be OAuth2 compliant
2016-01-26 17:54:08 +01:00
mposolda 3bc4355bb1 Small note about distributable HttpSessions in clustering docs 2016-01-26 17:12:26 +01:00
mposolda 3731964a2a KEYCLOAK-2351 Support for response_type=token to be OAuth2 compliant 2016-01-26 17:09:42 +01:00
Marko Strukelj 5c46f0603d Fix typo bug introduced during modules refactoring 2016-01-26 16:45:22 +01:00
mposolda 90842cf7ef Minor change in message 2016-01-26 16:24:08 +01:00
Stian Thorgersen 9143d4b5cb Merge pull request #2111 from mstruk/KEYCLOAK-2362
KEYCLOAK-2362 NPE if SSL certificate is not trusted by Java's default keystore
2016-01-26 16:17:29 +01:00
Stian Thorgersen 301b61c4f9 Merge pull request #2113 from stianst/KEYCLOAK-2327
KEYCLOAK-2327 Make sure transaction is only committed or rolledback before response is returned
2016-01-26 16:06:15 +01:00
Stian Thorgersen e3daf6fcf8 KEYCLOAK-2327 Make sure transaction is only committed for success 2016-01-26 14:47:59 +01:00
Stian Thorgersen 39b3c648a2 Merge pull request #2109 from stianst/KEYCLOAK-2218
KEYCLOAK-2218 Allow updating user without including username
2016-01-26 13:56:01 +01:00
Marko Strukelj 4f890e8f2e KEYCLOAK-2362 NPE if SSL certificate is not trusted by Java's default keystore 2016-01-26 13:53:16 +01:00
Stian Thorgersen f9fd398f5b KEYCLOAK-2218 Allow updating user without including username 2016-01-26 13:01:49 +01:00
Stian Thorgersen b93deddda3 Merge pull request #2107 from mstruk/i18n
KEYCLOAK-2305 Complete internationalization of admin console
2016-01-26 12:50:03 +01:00
Stian Thorgersen 561fa06140 Merge pull request #2106 from stianst/KEYCLOAK-1341
KEYCLOAK-1341
2016-01-26 12:48:14 +01:00
Stian Thorgersen 646c75c6ff Merge pull request #2103 from stianst/KEYCLOAK-2388
KEYCLOAK-2388
2016-01-26 12:47:51 +01:00
Marek Posolda 3a67fd7685 Merge pull request #2105 from mposolda/master
KEYCLOAK-2379 Fix possible error during sycnchronization changed user…
2016-01-26 11:48:15 +01:00
Stian Thorgersen 4a698bc22a KEYCLOAK-2388
Localisation should fallback to english rather than display raw keys
2016-01-26 11:47:30 +01:00
Stian Thorgersen 26ec117b5e KEYCLOAK-1341
Admins can change sso timeout to 1 second and then not able to login
2016-01-26 11:24:00 +01:00
Marko Strukelj ea33af2c59 KEYCLOAK-2305 Complete internationalization of admin console 2016-01-26 11:22:45 +01:00
Stian Thorgersen c55b91ed32 Merge pull request #2102 from stianst/KEYCLOAK-2237
KEYCLOAK-2237
2016-01-26 11:08:14 +01:00
mposolda 506194fb7f KEYCLOAK-2379 Fix possible error during sycnchronization changed users with Active Directory 2016-01-26 10:43:17 +01:00
Stian Thorgersen 54abfa4859 KEYCLOAK-2237
Offer the possibility to add own locale to login/registration dialogs
2016-01-26 10:16:05 +01:00
Stian Thorgersen a21f70fcd2 Merge pull request #2104 from stianst/KEYCLOAK-2390
KEYCLOAK-2390
2016-01-26 09:51:54 +01:00
Stian Thorgersen 256819ea3a Merge pull request #2101 from stianst/KEYCLOAK-2391
KEYCLOAK-2391
2016-01-26 09:31:23 +01:00
Stian Thorgersen ee847c1f20 KEYCLOAK-2390
Relative redirect uri is broken
2016-01-26 09:01:14 +01:00
Stian Thorgersen 06caa8e67e KEYCLOAK-2391
View history of access to Resource Server
2016-01-26 08:50:28 +01:00
Bill Burke bdc439b4a4 Merge pull request #2100 from patriot1burke/master
KEYCLOAK-2389
2016-01-26 00:42:29 -05:00
Bill Burke daec8977e4 KEYCLOAK-2389 2016-01-25 19:34:57 -05:00
Bill Burke 1b0aa8e55b saml logging 2016-01-25 17:38:29 -05:00
Bill Burke 85c4279f0b Merge pull request #2098 from patriot1burke/master
fix doco errors
2016-01-25 10:16:35 -05:00
Bill Burke ca2c573f50 fix doco errors 2016-01-25 10:16:08 -05:00
Bill Burke 1cc359d1d8 Merge pull request #2096 from patriot1burke/master
redirect after post in flow
2016-01-22 18:40:45 -05:00
Bill Burke c28e1c76e0 Merge remote-tracking branch 'upstream/master' 2016-01-22 18:40:14 -05:00
Bill Burke 8b7bc5b153 redirect after post in flow 2016-01-22 18:39:55 -05:00
Bill Burke d3cab2be93 Merge pull request #2094 from bdecoste/master
KeyStore element in subsystem not required
2016-01-22 18:34:55 -05:00
Bill Burke 4d18812768 Merge pull request #2093 from patriot1burke/master
KEYCLOAK-2377
2016-01-22 18:20:07 -05:00
root ae6dde9cda KeyStore element in sunsystem not required 2016-01-22 15:05:24 -08:00
Bill Burke f3ea2ab8d0 fix errant pom 2016-01-22 17:03:31 -05:00
Bill Burke 742f162cfc Merge remote-tracking branch 'upstream/master' 2016-01-22 17:01:14 -05:00
Bill Burke fedf3d0e52 KEYCLOAK-2377 2016-01-22 17:00:51 -05:00
Stian Thorgersen e71ac6f1b3 Merge pull request #2090 from velias/KEYCLOAK-2348
KEYCLOAK-2348 - Social login provider for Microsoft account - KC master branch
2016-01-22 13:26:45 +01:00
Vlastimil Elias 4e23311318 KEYCLOAK-2348 - Social login provider for Microsoft account - KC master
branch
2016-01-22 11:03:08 +01:00
Stian Thorgersen 4492af2bda Merge pull request #2089 from mikesir87/patch-1
Update javascript-adapter.xml
2016-01-22 09:10:23 +01:00
Michael Irwin cd3a6007d7 Update javascript-adapter.xml
Several spelling fixes, grammar adjustments, and other alterations.

Some parts are still a little hard to read/follow, but this is at least a little bit of an improvement.
2016-01-22 00:33:46 -05:00
Bill Burke e0af79e66b Merge pull request #2087 from patriot1burke/master
KEYCLOAK-2373 KEYCLOAK-2376
2016-01-21 21:30:01 -05:00
Bill Burke 1ee76a126f KEYCLOAK-2373 KEYCLOAK-2376 2016-01-21 20:18:07 -05:00
Stian Thorgersen de472dbd43 Merge pull request #2085 from ssilvert/logging-i18n-services2
KEYCLOAK-1280: i18n for logging in services module
2016-01-21 19:49:43 +01:00
Stian Thorgersen 72ebaca233 Merge pull request #2084 from Sweazer/credential-migration-fix
Fixed sql syntax error in credential migration script
2016-01-21 19:47:44 +01:00
Stan Silvert fa2055c896 KEYCLOAK-1280: pom should not override version from dependency management 2016-01-21 11:55:38 -05:00
Stan Silvert c6dd0d52b9 KEYCLOAK-1280: i18n logging for org.keycloak.services.scheduled 2016-01-21 11:55:36 -05:00
Stan Silvert 446cd3701f KEYCLOAK-1280: i18n logging for org.keycloak.services.resources 2016-01-21 11:55:35 -05:00
Stan Silvert e73a88443c KEYCLOAK-1280: i18n logging for org.keycloak.services.resources 2016-01-21 11:55:33 -05:00
Stan Silvert 857201ab55 KEYCLOAK-1280: i18n logging for org.keycloak.services.messages 2016-01-21 11:55:31 -05:00
Stan Silvert 779a5c2f3c KEYCLOAK-1280: i18n logging for org.keycloak.services.managers 2016-01-21 11:55:30 -05:00
Stan Silvert c81b37cc4d KEYCLOAK-1280: i18n logging for
org.keycloak.services.clientregistration.oidc
2016-01-21 11:55:28 -05:00
Stan Silvert 27ad9dcdd1 KEYCLOAK-1280: i18n logging for org.keycloak.services 2016-01-21 11:55:26 -05:00
Stan Silvert 1f04676f08 KEYCLOAK-1280: i18n logging for org.keycloak.provider 2016-01-21 11:55:25 -05:00
Stan Silvert 0de4170865 KEYCLOAK-1280: i18n logging for org.keycloak.protocol.oidc.utils 2016-01-21 11:55:23 -05:00
Stan Silvert 9c33738941 KEYCLOAK-1280: i18n logging for org.keycloak.protocol.oidc.mappers 2016-01-21 11:55:21 -05:00
Stan Silvert adfc192877 KEYCLOAK-1280: i18n logging for org.keycloak.protocol.oidc.endpoints 2016-01-21 11:55:20 -05:00
Stan Silvert 550e23c8f6 KEYCLOAK-1280: i18n logging for org.keycloak.protocol.oidc 2016-01-21 11:55:18 -05:00
Stan Silvert 9dccd45543 KEYCLOAK-1280: i18n logging for org.keycloak.protocol 2016-01-21 11:55:17 -05:00
Stan Silvert d2ad1808a5 KEYCLOAK-1280: i18n logging for org.keycloak.partialimport 2016-01-21 11:55:15 -05:00
Stan Silvert 273c662b29 KEYCLOAK-1280: i18n logging for org.keycloak.exportimport 2016-01-21 11:55:14 -05:00
Stan Silvert 24602257e1 KEYCLOAK-1280: i18n logging for org.keycloak.email 2016-01-21 11:55:12 -05:00
Stan Silvert b544adf170 KEYCLOAK-1280: i18n logging for
org.keycloak.authentication.requiredactions
2016-01-21 11:55:10 -05:00
Stan Silvert 2cecce37a7 KEYCLOAK-1280: i18n logging for org.keycloak.authentication.forms 2016-01-21 11:55:09 -05:00
Stan Silvert 7bc74aac73 KEYCLOAK-1280: i18n logging for
org.keycloak.authentication.authenticators.resetcred
2016-01-21 11:55:07 -05:00
Stan Silvert dfb92db2b7 KEYCLOAK-1280: i18n logging for
org.keycloak.authentication.authenticators.directgrant
2016-01-21 11:55:05 -05:00
Stan Silvert 36e711fb88 KEYCLOAK-1280: i18n logging for
org.keycloak.authentication.authenticators.client
2016-01-21 11:55:04 -05:00
Stan Silvert 0ef8c18b93 KEYCLOAK-1280: i18n logging for
org.keycloak.services.authentication.authenticators.browser
2016-01-21 11:55:02 -05:00
Stan Silvert b1baea7023 KEYCLOAK-1280: i18n logging for
org.keycloak.authentication.authenticators.broker
2016-01-21 11:55:00 -05:00
Stan Silvert 3b4cb94ff1 KEYCLOAK-1280: i18n logging for org.keycloak.authentication 2016-01-21 11:54:59 -05:00
Stan Silvert 7514104974 KEYCLOAK-1280: I18N for logging 2016-01-21 11:54:57 -05:00
Moritz Becker 35a2d176fa Fixed sql syntax error in credential migration script 2016-01-21 17:09:42 +01:00
Bill Burke 0df651cc0c Merge pull request #2082 from Sweazer/client-ui-fix
Client UI fix
2016-01-21 10:18:56 -05:00
Moritz Becker b23ea18c89 client UI fix 2016-01-21 16:09:13 +01:00
Bill Burke ac513eac70 Merge pull request #2081 from patriot1burke/master
fix embedded keycloak, re-org saml-core
2016-01-21 09:57:14 -05:00
Bill Burke b625ed13a8 fix embedded keycloak, re-org saml-core 2016-01-21 09:56:28 -05:00
Stian Thorgersen f5db03d6e9 Merge pull request #2079 from stianst/master
Add test with different case in scheme part of redirect uri
2016-01-21 15:30:54 +01:00
Stian Thorgersen 45f8f5c926 Merge pull request #2078 from stianst/KEYCLOAK-2370
KEYCLOAK-2370
2016-01-21 14:22:13 +01:00
Stian Thorgersen e4898ae983 Add test with different case in scheme part of redirect uri 2016-01-21 14:12:40 +01:00
Stian Thorgersen 52048a6060 KEYCLOAK-2312 Move forms/common-themes to themes 2016-01-21 13:51:01 +01:00
Stian Thorgersen 53626fca5b Merge pull request #2077 from stianst/master
KEYCLOAK-2369
2016-01-21 13:16:22 +01:00
Stian Thorgersen a43be534c2 KEYCLOAK-2370
Remove syslog event listener
2016-01-21 13:15:30 +01:00
Stian Thorgersen bfdc18f482 KEYCLOAK-2369
Account page doesn't load
2016-01-21 12:34:41 +01:00
Stian Thorgersen 5008799895 Merge pull request #2064 from tkyjovsk/KEYCLOAK-1420
Keycloak 1420 enabled arqullian testsuite in default build
2016-01-21 09:58:53 +01:00
Stian Thorgersen 86fa63fbca Merge pull request #2075 from stianst/master
Updated readme
2016-01-21 09:51:12 +01:00
Stian Thorgersen 64b75f6833 Updated readme 2016-01-21 09:50:33 +01:00
Stian Thorgersen dd4981b3fd Merge pull request #2074 from stianst/master
Updated readme
2016-01-21 09:49:05 +01:00
Stian Thorgersen a7d4d4373a Updated readme 2016-01-21 09:48:45 +01:00
Stian Thorgersen 82a260b18a Merge pull request #2073 from stianst/master
KEYCLOAK-2312 Move client-registration libs into integration
2016-01-21 09:48:06 +01:00
Stian Thorgersen 59c7cfcc97 KEYCLOAK-2312 Move client-registration libs into integration 2016-01-21 09:06:23 +01:00
Stian Thorgersen 6677995ba3 Merge pull request #2046 from tkyjovsk/KEYCLOAK-1642
KEYCLOAK-1642 Moved Admin Console UI tests to a separate module.
2016-01-21 08:25:50 +01:00
Bill Burke fcde4c3302 Merge pull request #2072 from patriot1burke/master
final re-org work
2016-01-20 17:27:03 -05:00
Bill Burke efd8317259 final re-org work 2016-01-20 17:26:26 -05:00
Bill Burke d9487a8745 social broker reorg 2016-01-20 16:46:38 -05:00
Bill Burke fd83f0acef Merge pull request #2070 from patriot1burke/master
infinispan reorg
2016-01-20 16:15:16 -05:00
Bill Burke 01f3c6ceb7 reorg event log/email 2016-01-20 15:38:09 -05:00
Bill Burke 83ecef2f29 force rebuild 2016-01-20 15:28:06 -05:00
Bill Burke ad33d3c0d8 infinispan reorg 2016-01-20 14:52:04 -05:00
Bill Burke 94fa1b2c89 Merge pull request #2068 from stianst/KEYCLOAK-2185
KEYCLOAK-2185 Add support to disable realm and user cache, and added …
2016-01-20 10:54:00 -05:00
Tomas Kyjovsky 91195102f3 Moved EAP7 adapter test module to proper location. 2016-01-20 16:15:33 +01:00
Tomas Kyjovsky 6d7092ef4c Merge upstream-master into KEYCLOAK-1642
Conflicts:
	testsuite/integration-arquillian/tests/adapters/eap6/pom.xml
	testsuite/integration-arquillian/tests/adapters/pom.xml
2016-01-20 16:12:20 +01:00
Stian Thorgersen 7ab851728e Merge pull request #2069 from stianst/KEYCLOAK-2323
KEYCLOAK-2323 Revert changes
2016-01-20 14:36:08 +01:00
Stian Thorgersen 73db7a0ea9 KEYCLOAK-2323 Revert changes 2016-01-20 14:34:59 +01:00
Stian Thorgersen d7ee63f3c1 Merge pull request #2065 from vramik/KEYCLOAK-2347
KEYCLOAK-2347: Test - Adapter - EAP 7.0
2016-01-20 14:18:58 +01:00
Stian Thorgersen 3dc090b893 KEYCLOAK-2185 Add support to disable realm and user cache, and added support to clear caches from admin console 2016-01-20 14:09:03 +01:00
Stian Thorgersen c4b1acb8eb Merge pull request #2067 from stianst/KEYCLOAK-2346
KEYCLOAK-2346 Add identity provider and external username to event wh…
2016-01-20 13:00:22 +01:00
Stian Thorgersen 733ca53983 KEYCLOAK-2346 Add identity provider and external username to event when login via broker 2016-01-20 10:23:46 +01:00
Stian Thorgersen 5b3fcab4c9 Merge pull request #2063 from tkyjovsk/KEYCLOAK-2238
Keycloak 2238 fixes for some servlet-based adapter tests
2016-01-20 09:11:44 +01:00
Stian Thorgersen 4318ed26b2 Merge pull request #2059 from fmaturel/master
Correcting French translation
2016-01-20 09:10:27 +01:00
Stian Thorgersen ddfeae39d0 Merge pull request #2055 from vramik/prod
KEYCLOAK-2340: Update arquillian testsuite for dr3 build
2016-01-20 09:09:35 +01:00
Tomas Kyjovsky eb14bdff01 KEYCLOAK-1642 Added profile for enabling console UI tests. Disabled by default. 2016-01-20 09:07:07 +01:00
Tomas Kyjovsky 424678c131 KEYCLOAK-1420 Removed redundant travis build step. 2016-01-20 07:28:27 +01:00
Tomas Kyjovsky a69a89cbde KEYCLOAK-1420 Removed redundant profile "arquillian-integration-tests" from the root POM. 2016-01-20 07:27:43 +01:00
Tomas Kyjovsky 9d68d46a1b KEYCLOAK-1420 Added arquillian testsuite to the default build. 2016-01-20 07:26:46 +01:00
Tomas Kyjovsky c8d8423852 KEYCLOAK-2238 Fixed client URLs in demorealm.json used in servlet adapter tests. 2016-01-20 07:22:19 +01:00
Tomas Kyjovsky efb82cbafb KEYCLOAK-2238 Added null check into AbstractAdapterTest 2016-01-20 07:21:31 +01:00
Tomas Kyjovsky cc82c509c5 Reorganized arquillian testsuite modules. 2016-01-20 07:16:53 +01:00
Bill Burke 9a63039d1a Merge pull request #2062 from patriot1burke/master
re-org, jpa, mongo, truststore, httpclient
2016-01-19 19:25:22 -05:00
Bill Burke 35caa10ce8 Merge remote-tracking branch 'upstream/master' 2016-01-19 18:11:56 -05:00
Bill Burke 7d08d4c036 fixes 2016-01-19 18:11:45 -05:00
Bill Burke 4ed1eb66ee truststore httpclient 2016-01-19 17:29:16 -05:00
Bill Burke 17d856a5d8 mongo 2016-01-19 17:12:54 -05:00
Bill Burke 9b09a91481 consolidate JPA 2016-01-19 17:00:58 -05:00
Bill Burke d52e186c4e Merge pull request #2060 from patriot1burke/master
reorg freemarker
2016-01-19 14:06:23 -05:00
fmaturel 17268a0bd5 Correcting French translation 2016-01-19 17:37:14 +01:00
Bill Burke 46634b386e reorg freemarker 2016-01-19 11:33:59 -05:00
Tomas Kyjovsky 1dd8a04703 Merge upstream-master into KEYCLOAK-1642 2016-01-19 17:33:20 +01:00
Vlasta Ramik 9385c8a4b3 KEYCLOAK-2340: removed reference to RH-SSO 2016-01-19 14:18:39 +01:00
Vlasta Ramik 6d872f0c03 KEYCLOAK-2347: Test - Adapter - EAP 7.0 2016-01-19 13:59:07 +01:00
Stian Thorgersen 65521864d4 Merge pull request #2056 from stianst/KEYCLOAK-2344
KEYCLOAK-2344
2016-01-19 13:35:42 +01:00
Stian Thorgersen e50709fc2d KEYCLOAK-2344
Realm Display Name is not used in verification e-mail
2016-01-19 13:01:30 +01:00
Stian Thorgersen e4e532ca39 Merge pull request #2054 from stianst/KEYCLOAK-2157
KEYCLOAK-2157
2016-01-19 11:44:22 +01:00
Vlasta Ramik 0211798161 KEYCLOAK-2340: Update arquillian testsuite for dr3 build 2016-01-19 11:09:08 +01:00
Stian Thorgersen fdd7001bee KEYCLOAK-2157
Language drop-down is not obvious
2016-01-19 10:44:31 +01:00
Stian Thorgersen 56b9009225 Merge pull request #2052 from stianst/KEYCLOAK-1572
Keycloak 1572
2016-01-19 10:44:16 +01:00
Stian Thorgersen 5f8c26de63 Merge pull request #2053 from stianst/KEYCLOAK-813
KEYCLOAK-813
2016-01-19 10:08:04 +01:00
Stian Thorgersen 3452078177 Update migration guide 2016-01-19 09:59:49 +01:00
Stian Thorgersen 8b91d46ea2 KEYCLOAK-813
Long user attributes render off the screen
2016-01-19 09:26:10 +01:00
Stian Thorgersen 32978d022d KEYCLOAK-1572
Messages on login page are not in line with PatternFly
2016-01-19 08:52:44 +01:00
Stian Thorgersen 9d9ce6c04e Merge pull request #2048 from stianst/KEYCLOAK-2286
KEYCLOAK-2286 Remove deprecated OpenID Connect endpoints
2016-01-18 21:55:22 +01:00
Stian Thorgersen e8336f3dd4 Merge pull request #2051 from stianst/KEYCLOAK-2308
KEYCLOAK-2308
2016-01-18 20:43:31 +01:00
Stian Thorgersen 1a344fe8a0 Merge pull request #2047 from tkyjovsk/KEYCLOAK-2127_property-fix
KEYCLOAK-2127 Added missing definition of "jboss.server.config.dir" p…
2016-01-18 20:43:08 +01:00
Stian Thorgersen ebd732eaff Merge pull request #2050 from stianst/KEYCLOAK-2328
KEYCLOAK-2328
2016-01-18 20:42:41 +01:00
Stian Thorgersen 594c1451c0 Merge pull request #2049 from stianst/KEYCLOAK-2160
KEYCLOAK-2160 Add id to user table
2016-01-18 20:42:21 +01:00
Stian Thorgersen bc845bed0e KEYCLOAK-2286 Remove deprecated OpenID Connect endpoints 2016-01-18 20:31:23 +01:00
Stian Thorgersen 55ab973cad KEYCLOAK-2308
Save button is enabled on Theme page
2016-01-18 20:28:34 +01:00
Stian Thorgersen 60a372a35e KEYCLOAK-2328
Client registration service documentation has <provider> in example links
2016-01-18 20:11:15 +01:00
Stian Thorgersen 75ad0c8ac6 KEYCLOAK-2160 Add id to user table 2016-01-18 20:07:57 +01:00
Tomas Kyjovsky 52af74f051 KEYCLOAK-2127 Added missing definition of "jboss.server.config.dir" property. 2016-01-18 19:33:32 +01:00
Stian Thorgersen 81fc03b3fe Merge pull request #2044 from stianst/master
KEYCLOAK-2313 Add getName, getDisplayName, getDisplayNameHtml to acco…
2016-01-18 19:17:02 +01:00
Tomas Kyjovsky 3e35f83eb3 Merge upstream-master into refactoring 2016-01-18 18:13:19 +01:00
Tomas Kyjovsky 2650cc152d Moved admin UI tests to separate module. 2016-01-18 16:02:24 +01:00
Stian Thorgersen 3f6b848849 KEYCLOAK-2313 Add getName, getDisplayName, getDisplayNameHtml to account RealmBean 2016-01-18 14:42:08 +01:00
Stian Thorgersen 79eb42522a Merge pull request #2042 from pedroigor/KEYCLOAK-2336
[KEYCLOAK-2336] - Support ECP clients using SOAP 1.1
2016-01-18 14:37:56 +01:00
Stian Thorgersen bb3f036267 Merge pull request #2041 from stianst/master
KEYCLOAK-2319
2016-01-18 14:37:34 +01:00
Pedro Igor 7ec52ebc2b [KEYCLOAK-2336] - Support ECP clients using SOAP 1.1 2016-01-18 11:01:59 -02:00
Stian Thorgersen 904ed65a5c KEYCLOAK-2319
Cannot login to admin console after upgrade 1.6 -> 1.8.CR1
2016-01-18 12:34:18 +01:00
Stian Thorgersen ded919c0a6 Merge pull request #2033 from ahus1/ahus1_location_fragment_lost_on_logout
Handle URL fragments when redirect from logout / KEYCLOAK-2323
2016-01-18 09:52:37 +01:00
Stian Thorgersen 5462075d17 Merge pull request #2039 from patriot1burke/master
broker and social re-org
2016-01-18 09:27:43 +01:00
Bill Burke b0054b7682 email, login, account 2016-01-16 09:38:24 -05:00
Bill Burke ec05103ca0 Merge remote-tracking branch 'upstream/master' 2016-01-16 09:16:17 -05:00
Bill Burke b403c9b934 broker and social 2016-01-16 09:15:17 -05:00
Bill Burke 7895eb6a3d Merge pull request #2038 from patriot1burke/master
1st phase module re-org
2016-01-15 21:22:50 -05:00
Bill Burke 76e3a72f4c fixes 2016-01-15 20:18:36 -05:00
Bill Burke d1a43d6318 fixes 2016-01-15 20:08:17 -05:00
Bill Burke 007e9530ec brute force refactr, mv protocol 2016-01-15 19:25:28 -05:00
Bill Burke 5017d71383 exportimport and timer and events 2016-01-15 19:07:17 -05:00
Bill Burke b93d55cb63 remove model-api, add server-spi 2016-01-15 18:44:17 -05:00
Bill Burke de84756515 Merge pull request #2036 from thomasdarimont/issue/KEYCLOAK-2329-propagate-generated-id-to-new-identity-provider
KEYCLOAK-2329 - fix wrong resourcePath in AdminEvent after creating new IdentityProvider stored via JPA.
2016-01-15 17:31:40 -05:00
Thomas Darimont 39cb362d63 KEYCLOAK-2329 - fix wrong resourcePath in AdminEvent after creating new IdentityProvider stored via JPA.
We now propagate the generated internal id to the given IdentityProvider instance.
Previously if one creates a new IdentityProvider in a Realm with activated admin event listeners,
then a admin event is created that contains a resourcePath that ends with /null instead of /some-uuid.
2016-01-15 20:29:38 +01:00
Stian Thorgersen 504218470b Merge pull request #2032 from ahus1/ahus1_timeskew_for_init
set timeSkew when passing tokens to init()
2016-01-15 16:38:38 +01:00
Stian Thorgersen b21bf21043 Merge pull request #2028 from stianst/JACKSON2
KEYCLOAK-1809
2016-01-15 16:29:01 +01:00
Stian Thorgersen 33565ff8d9 Added jax-rs response filter to commit transaction 2016-01-15 15:50:38 +01:00
Bill Burke e77f940c9f Merge pull request #2031 from helder-jaspion/master
Fix typos
2016-01-14 19:27:06 -05:00
Bill Burke af554a95eb Merge pull request #2034 from patriot1burke/master
saml client installation formats
2016-01-14 19:26:07 -05:00
Bill Burke 5a74c72452 Merge remote-tracking branch 'upstream/master' 2016-01-14 18:33:22 -05:00
Bill Burke 96193c0b8e formatting 2016-01-14 18:11:58 -05:00
Alexander Schwartz b7ac2548f1 Handle URL fragments when redirect from logout / KEYCLOAK-2323 2016-01-14 23:06:16 +01:00
Bill Burke 67ef3e7a45 client installation formats 2016-01-14 16:50:17 -05:00
Alexander Schwartz 9b8c80e83f set timeSkew when passing tokens to init(), also allow timeSkew to be passed as a parameter / KEYCLOAK-2322 2016-01-14 22:37:29 +01:00
Helder Alves 7283d4a0c6 Update admin-messages_en.properties
typo fix
2016-01-14 14:47:42 -02:00
Helder Alves a20aec89ba Update messages_pt_BR.properties
changed from "email" to "e-mail"
2016-01-14 14:42:42 -02:00
Helder Alves 09a4a864de Update messages_pt_BR.properties
Changed word "email" to "e-mail"
2016-01-14 14:41:24 -02:00
Stian Thorgersen 435980d776 KEYCLOAK-1809
Upgrade jackson to version 2.x
2016-01-14 16:34:30 +01:00
Stian Thorgersen e913c8da16 Merge pull request #2029 from stianst/KEYCLOAK-2307
KEYCLOAK-2307
2016-01-14 16:33:45 +01:00
Stian Thorgersen e27d0752c4 KEYCLOAK-2307
OTP field is remember in browser
2016-01-14 15:56:08 +01:00
Bill Burke 0bad78c53b Merge pull request #2025 from thomasdarimont/issue/KEYCLOAK-2311-white-list-role-for-conditional-otp
KEYCLOAK-2311 - Allow to specify role to skip conditional OTP authentication.
2016-01-14 09:05:58 -05:00
Bill Burke 1e16803d7b Merge pull request #2021 from cainj13/providerConfigPassword
Add 'password' configuration field type for federation providers
2016-01-14 09:05:17 -05:00
Stian Thorgersen 04d3f1a632 Merge pull request #2027 from stianst/master
Reintrodce creating admin from welcome page as removing it breaks tests
2016-01-14 15:02:49 +01:00
Stian Thorgersen 15103aad81 Reintrodce creating admin from welcome page as removing it breaks tests 2016-01-14 13:46:13 +01:00
Stian Thorgersen 73e23cf235 Merge pull request #2026 from raehalme/events-typo
Fixed typo in 22.2. Event Listener
2016-01-14 13:16:50 +01:00
Thomas Raehalme 8c249c331c Fixed typo in 22.2. Event Listener 2016-01-14 13:52:05 +02:00
Stian Thorgersen eb10d6bfd6 Merge pull request #2024 from stianst/FIX-CLIENT-INSTALLATION-TEST
Fix client installation test
2016-01-14 12:33:26 +01:00
Stian Thorgersen 0db0dad4e6 Merge pull request #2019 from vramik/prod
arquillian-testsuite: add support for testing prod binaries
2016-01-14 12:29:06 +01:00
Thomas Darimont d6b10aa911 KEYCLOAK-2311 - Polishing.
Aligned constant names, but keep constant values to stay compatible with previous version.
2016-01-14 12:05:19 +01:00
Stian Thorgersen a6da6e48f9 Fix client installation test 2016-01-14 11:54:39 +01:00
Thomas Darimont 92c2ec366d KEYCLOAK-2311 - Allow to specify role to skip conditional OTP authentication.
We now allow specify a role to skip OTP.
Previously it was  not possible to specify that OTP authentication should be skipped via a role but the
ConditionalOtpAuthenticator allowed to specify to show/skip OTP via a user attribute or HTTP request header pattern.
Having the "skip role" aligns the role based configuration options with the user attribute and HTTP request header configuration.
2016-01-14 11:47:30 +01:00
Bill Burke 714e2fa7a5 Merge pull request #2022 from patriot1burke/master
KEYCLOAK-2098
2016-01-13 19:44:29 -05:00
Bill Burke f9c458aa0e Merge remote-tracking branch 'upstream/master' 2016-01-13 16:18:42 -05:00
Bill Burke 9dc21224bd clean up most redirects 2016-01-13 16:18:24 -05:00
Josh Cain 202d562022 Add 'password' configuration field type for federation providers 2016-01-13 13:05:38 -06:00
Stian Thorgersen 30c3a5ed70 Merge pull request #2020 from stianst/master
Mark all SPIs as internal
2016-01-13 19:24:43 +01:00
Bill Burke b3967263d1 Merge remote-tracking branch 'upstream/master' 2016-01-13 10:16:06 -05:00
Bill Burke b9c9b58727 refactor 2016-01-13 10:15:54 -05:00
Stian Thorgersen f8841d2365 Mark all SPIs as internal 2016-01-13 15:49:53 +01:00
Vlasta Ramik 36461aabc1 renamed version.eap6.server.dist proprty to version.server.dist, removed auth-server-eap6 profile 2016-01-13 15:37:30 +01:00
Stian Thorgersen 1619624691 Merge pull request #2018 from stianst/master
KEYCLOAK-2142
2016-01-13 15:06:48 +01:00
Stian Thorgersen e572d45bea KEYCLOAK-2142
Drop support to deploy server to EAP 6.4
2016-01-13 14:32:04 +01:00
Vlasta Ramik 1bbd670091 removed redundant profile 2016-01-13 13:49:15 +01:00
Vlasta Ramik 2edc68fff6 removed redundant dependency declaration 2016-01-13 12:20:49 +01:00
Vlasta Ramik 06a3c3b995 update datasource.xsl in wildfly server module 2016-01-13 12:15:09 +01:00
Vlasta Ramik ef1aa2127d eap7 server version bump 2016-01-13 12:10:02 +01:00
Vlasta Ramik 6dd7634a77 Merge remote-tracking branch 'upstream/master' into prod
Conflicts:
	testsuite/integration-arquillian/tests/adapters/eap6/pom.xml
	testsuite/integration-arquillian/tests/adapters/eap6/src/main/xslt/standalone.xsl
2016-01-13 12:09:34 +01:00
Stian Thorgersen ddb41e2c58 Merge pull request #2017 from mposolda/master
KEYCLOAK-2270 Use sub instead of iss for clientId in JWTClientAuthent…
2016-01-13 11:10:09 +01:00
Stian Thorgersen 50fdf33040 Merge pull request #2011 from mhajas/eap64
KEYCLOAK-1646 Run adapter tests on EAP 6.4
2016-01-13 11:09:49 +01:00
Stian Thorgersen 3a83adae77 Merge pull request #2016 from stianst/master
Version bump
2016-01-13 11:09:26 +01:00
mposolda 4642876323 KEYCLOAK-2270 Use sub instead of iss for clientId in JWTClientAuthenticator 2016-01-13 10:12:20 +01:00
Stian Thorgersen 0193c696ab Version bump 2016-01-13 09:20:38 +01:00
Vlasta Ramik 52588bb25f fixed adapter dependencies for eap6 and as7 2016-01-12 15:13:59 +01:00
Vlasta Ramik a2f5d46764 add support for firefox_binary for second browser 2016-01-12 14:59:21 +01:00
Vlasta Ramik 6c3c08e711 add installing adapter tests via cli scripts, checking server log 2016-01-12 14:31:28 +01:00
mhajas c0d3d9cf6b Remove unnecessary lines 2016-01-12 12:52:26 +01:00
mhajas c93db980a6 Merge remote-tracking branch 'upstream/master' into eap64 2016-01-12 12:02:56 +01:00
mhajas acf0100411 Ignore DemoServletsAdapterTest on EAP6 2016-01-12 11:56:10 +01:00
Vlasta Ramik 554da73398 Merge remote-tracking branch 'upstream/master' into prod 2016-01-11 09:43:52 +01:00
Vlasta Ramik 1cde40f556 fixed some compile warnings 2016-01-08 16:28:36 +01:00
Vlasta Ramik df590bfc3f fixed some compile warnings 2016-01-08 16:27:25 +01:00
Vlasta Ramik bce5c49cbc fixed some compile warnings 2016-01-08 16:27:06 +01:00
Vlasta Ramik bd8e662f88 fixed copy-admin-user-json-file 2016-01-08 16:13:15 +01:00
mhajas f9f1e36df6 Ignore DemoServletAdapterTest on EAP6 2016-01-08 14:49:48 +01:00
mhajas 27f6390d00 Fix grantServerBasedApp test 2016-01-08 14:09:06 +01:00
mhajas 8c4f071003 Merge remote-tracking branch 'upstream/master' into eap64 2016-01-08 13:28:35 +01:00
Vlasta Ramik c5fc4c0805 Merge remote-tracking branch 'upstream/master' into prod 2016-01-08 11:36:46 +01:00
vramik 48be6070d0 add support for prod bits 2016-01-08 11:13:59 +01:00
vramik 448a15b2ca install adapter via cli script from java code after start 2016-01-07 18:58:32 +01:00
vramik efa112f820 updated version of xml plugin, fix adapter-libs-provided profile in eap6 adapter 2016-01-04 16:46:47 +01:00
mhajas 4463f6e1e1 Run adapter tests on EAP 6.4 + test fixes + hot fix of bad arquillian URL provider 2015-12-21 12:36:34 +01:00
vramik c759719e95 added support for set jdk for adapter container 2015-12-18 14:56:49 +01:00
vramik 19471d07b8 added support for set jdk for adapter container 2015-12-18 13:40:00 +01:00
vramik 57ea0a3b42 set default build to community eap6 2015-12-18 10:49:57 +01:00
vramik 6bb05bf339 fix 2015-12-18 00:23:19 +01:00
vramik d5950a615a exclude client tests from adapters 2015-12-18 00:15:03 +01:00
vramik 6af2e1054c eap6-adapter 2015-12-17 23:20:37 +01:00
vramik 53ca4b9294 integration-arquillian prod: add support for non default firefox 2015-12-17 10:27:42 +01:00
vramik aa0d463487 integration-arquillian prod: add jpa profile 2015-12-16 12:22:44 +01:00
Vlasta Ramik a418e71dc6 Merge branch 'master' of https://github.com/keycloak/keycloak into prod 2015-12-16 10:36:07 +01:00
vramik e1de2c0661 integration-arquillian: add support for prod testing 2015-12-15 13:14:30 +01:00
6176 changed files with 205519 additions and 106377 deletions

No files matched your search

-1
View File
@@ -16,6 +16,5 @@ install:
script:
- mvn test -B
- mvn -file testsuite/integration-arquillian test -B -Pno-console
sudo: false
+15 -13
View File
@@ -1,7 +1,9 @@
Keycloak
========
Keycloak is an SSO Service for web apps and REST services. For more information visit [http://keycloak.org](http://keycloak.org).
Open Source Identity and Access Management for modern Applications and Services.
For more information about Keycloak visit [Keycloak homepage](http://keycloak.org) and [Keycloak blog](http://blog.keycloak.org).
Building
@@ -48,22 +50,22 @@ To start Keycloak from the appliance distribution first build the distribution i
To stop the server press `Ctrl + C`.
Help and Documentation
----------------------
* [Documentation](http://keycloak.jboss.org/docs) - User Guide, Admin REST API and Javadocs
* [User Mailing List](https://lists.jboss.org/mailman/listinfo/keycloak-user) - Mailing list to ask for help and general questions about Keycloak
* [JIRA](https://issues.jboss.org/projects/KEYCLOAK) - Issue tracker for bugs and feature requests
Contributing
------------
* See [Hacking on Keycloak](misc/HackingOnKeycloak.md)
Documentation
-------------
* [User Guide, Admin REST API and Javadocs](http://keycloak.jboss.org/docs)
* Developer documentation
* [Hacking on Keycloak](misc/HackingOnKeycloak.md) - how to become a Keycloak contributor
* [Testsuite](misc/Testsuite.md) - details about testsuite, but also how to quickly run Keycloak during development and a few test tools (OTP generation, LDAP server, Mail server)
* [Database Testing](misc/DatabaseTesting.md) - how to do testing of Keycloak on different databases
* [Updating Database](misc/UpdatingDatabaseSchema.md) - how to change the Keycloak database
* [Release Process](misc/ReleaseProcess.md) - how to release Keycloak
* [Hacking on Keycloak](misc/HackingOnKeycloak.md) - How to become a Keycloak contributor
* [Testsuite](misc/Testsuite.md) - Details about testsuite, but also how to quickly run Keycloak during development and a few test tools (OTP generation, LDAP server, Mail server)
* [Database Testing](misc/DatabaseTesting.md) - How to do testing of Keycloak on different databases
* [Updating Database](misc/UpdatingDatabaseSchema.md) - How to change the Keycloak database
* [Developer Mailing List](https://lists.jboss.org/mailman/listinfo/keycloak-dev) - Mailing list to discuss development of Keycloak
License
+140
View File
@@ -0,0 +1,140 @@
<?xml version="1.0"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.9.4.Final</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-adapter-core</artifactId>
<name>Keycloak Adapter Core</name>
<description/>
<properties>
<keycloak.osgi.export>
org.keycloak.adapters.*
</keycloak.osgi.export>
<keycloak.osgi.import>
org.keycloak.*;version="${project.version}",
org.apache.http.*;version=${apache.httpcomponents.version},
org.apache.karaf.jaas.boot.principal;resolution:=optional,
org.apache.karaf.jaas.modules;resolution:=optional,
*;resolution:=optional
</keycloak.osgi.import>
</properties>
<dependencies>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>${jboss.logging.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-spi</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<instructions>
<Bundle-ClassPath>.</Bundle-ClassPath>
<Bundle-Name>${project.name}</Bundle-Name>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Import-Package>${keycloak.osgi.import}</Import-Package>
<Export-Package>${keycloak.osgi.export}</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.apache.http.HttpEntity;
@@ -152,11 +169,7 @@ public class AdapterDeploymentContext {
public void setAuthServerBaseUrl(String authServerBaseUrl) {
this.authServerBaseUrl = authServerBaseUrl;
KeycloakUriBuilder serverBuilder = KeycloakUriBuilder.fromUri(authServerBaseUrl);
resolveBrowserUrls(serverBuilder);
if (delegate.getRelativeUrls() == RelativeUrlsUsed.ALL_REQUESTS) {
resolveNonBrowserUrls(serverBuilder);
}
resolveUrls(serverBuilder);
}
@Override
@@ -433,6 +446,16 @@ public class AdapterDeploymentContext {
public void setPrincipalAttribute(String principalAttribute) {
delegate.setPrincipalAttribute(principalAttribute);
}
@Override
public boolean isTurnOffChangeSessionIdOnLogin() {
return delegate.isTurnOffChangeSessionIdOnLogin();
}
@Override
public void setTurnOffChangeSessionIdOnLogin(boolean turnOffChangeSessionIdOnLogin) {
delegate.setTurnOffChangeSessionIdOnLogin(turnOffChangeSessionIdOnLogin);
}
}
protected KeycloakUriBuilder getBaseBuilder(HttpFacade facade, String base) {
@@ -0,0 +1,61 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.keycloak.adapters.spi.AdapterSessionStore;
/**
* Abstraction for storing token info on adapter side. Intended to be per-request object
*
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public interface AdapterTokenStore extends AdapterSessionStore {
/**
* Impl can validate if current token exists and perform refreshing if it exists and is expired
*/
void checkCurrentToken();
/**
* Check if we are logged already (we have already valid and successfully refreshed accessToken). Establish security context if yes
*
* @param authenticator used for actual request authentication
* @return true if we are logged-in already
*/
boolean isCached(RequestAuthenticator authenticator);
/**
* Finish successful OAuth2 login and store validated account
*
* @param account
*/
void saveAccountInfo(OidcKeycloakAccount account);
/**
* Handle logout on store side and possibly propagate logout call to Keycloak
*/
void logout();
/**
* Callback invoked after successful token refresh
*
* @param securityContext context where refresh was performed
*/
void refreshCallback(RefreshableKeycloakSecurityContext securityContext);
}
@@ -0,0 +1,94 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.jboss.logging.Logger;
import org.keycloak.KeycloakPrincipal;
import org.keycloak.KeycloakSecurityContext;
import org.keycloak.representations.AccessToken;
import org.keycloak.common.util.UriUtils;
import java.util.Collections;
import java.util.Set;
import java.util.UUID;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class AdapterUtils {
private static Logger log = Logger.getLogger(AdapterUtils.class);
public static String generateId() {
return UUID.randomUUID().toString();
}
public static Set<String> getRolesFromSecurityContext(RefreshableKeycloakSecurityContext session) {
Set<String> roles = null;
AccessToken accessToken = session.getToken();
if (session.getDeployment().isUseResourceRoleMappings()) {
if (log.isTraceEnabled()) {
log.trace("useResourceRoleMappings");
}
AccessToken.Access access = accessToken.getResourceAccess(session.getDeployment().getResourceName());
if (access != null) roles = access.getRoles();
} else {
if (log.isTraceEnabled()) {
log.trace("use realm role mappings");
}
AccessToken.Access access = accessToken.getRealmAccess();
if (access != null) roles = access.getRoles();
}
if (roles == null) roles = Collections.emptySet();
if (log.isTraceEnabled()) {
log.trace("Setting roles: ");
for (String role : roles) {
log.trace(" role: " + role);
}
}
return roles;
}
public static String getPrincipalName(KeycloakDeployment deployment, AccessToken token) {
String attr = "sub";
if (deployment.getPrincipalAttribute() != null) attr = deployment.getPrincipalAttribute();
String name = null;
if ("sub".equals(attr)) {
name = token.getSubject();
} else if ("email".equals(attr)) {
name = token.getEmail();
} else if ("preferred_username".equals(attr)) {
name = token.getPreferredUsername();
} else if ("name".equals(attr)) {
name = token.getName();
} else if ("given_name".equals(attr)) {
name = token.getGivenName();
} else if ("family_name".equals(attr)) {
name = token.getFamilyName();
} else if ("nickname".equals(attr)) {
name = token.getNickName();
}
if (name == null) name = token.getSubject();
return name;
}
public static KeycloakPrincipal<RefreshableKeycloakSecurityContext> createPrincipal(KeycloakDeployment deployment, RefreshableKeycloakSecurityContext securityContext) {
return new KeycloakPrincipal<RefreshableKeycloakSecurityContext>(getPrincipalName(deployment, securityContext.getToken()), securityContext);
}
}
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.jboss.logging.Logger;
@@ -0,0 +1,124 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.jboss.logging.Logger;
import org.keycloak.OAuth2Constants;
import org.keycloak.adapters.authentication.ClientCredentialsProviderUtils;
import org.keycloak.adapters.spi.AuthOutcome;
import org.keycloak.adapters.spi.HttpFacade;
import org.keycloak.common.util.Base64;
import org.keycloak.constants.ServiceUrlConstants;
import org.keycloak.representations.AccessTokenResponse;
import org.keycloak.util.JsonSerialization;
import org.keycloak.common.util.KeycloakUriBuilder;
import java.util.List;
/**
* Basic auth request authenticator.
*/
public class BasicAuthRequestAuthenticator extends BearerTokenRequestAuthenticator {
protected Logger log = Logger.getLogger(BasicAuthRequestAuthenticator.class);
public BasicAuthRequestAuthenticator(KeycloakDeployment deployment) {
super(deployment);
}
public AuthOutcome authenticate(HttpFacade exchange) {
List<String> authHeaders = exchange.getRequest().getHeaders("Authorization");
if (authHeaders == null || authHeaders.size() == 0) {
challenge = challengeResponse(exchange, OIDCAuthenticationError.Reason.NO_AUTHORIZATION_HEADER, null, null);
return AuthOutcome.NOT_ATTEMPTED;
}
tokenString = null;
for (String authHeader : authHeaders) {
String[] split = authHeader.trim().split("\\s+");
if (split == null || split.length != 2) continue;
if (!split[0].equalsIgnoreCase("Basic")) continue;
tokenString = split[1];
}
if (tokenString == null) {
challenge = challengeResponse(exchange, OIDCAuthenticationError.Reason.INVALID_TOKEN, null, null);
return AuthOutcome.NOT_ATTEMPTED;
}
AccessTokenResponse atr=null;
try {
String userpw=new String(Base64.decode(tokenString));
String[] parts=userpw.split(":");
atr = getToken(parts[0], parts[1]);
tokenString = atr.getToken();
} catch (Exception e) {
log.debug("Failed to obtain token", e);
challenge = challengeResponse(exchange, OIDCAuthenticationError.Reason.INVALID_TOKEN, "no_token", e.getMessage());
return AuthOutcome.FAILED;
}
return authenticateToken(exchange, atr.getToken());
}
private AccessTokenResponse getToken(String username, String password) throws Exception {
AccessTokenResponse tokenResponse=null;
HttpClient client = deployment.getClient();
HttpPost post = new HttpPost(
KeycloakUriBuilder.fromUri(deployment.getAuthServerBaseUrl())
.path(ServiceUrlConstants.TOKEN_PATH).build(deployment.getRealm()));
java.util.List <NameValuePair> formparams = new java.util.ArrayList <NameValuePair>();
formparams.add(new BasicNameValuePair(OAuth2Constants.GRANT_TYPE, OAuth2Constants.PASSWORD));
formparams.add(new BasicNameValuePair("username", username));
formparams.add(new BasicNameValuePair("password", password));
ClientCredentialsProviderUtils.setClientCredentials(deployment, post, formparams);
UrlEncodedFormEntity form = new UrlEncodedFormEntity(formparams, "UTF-8");
post.setEntity(form);
HttpResponse response = client.execute(post);
int status = response.getStatusLine().getStatusCode();
HttpEntity entity = response.getEntity();
if (status != 200) {
throw new java.io.IOException("Bad status: " + status);
}
if (entity == null) {
throw new java.io.IOException("No Entity");
}
java.io.InputStream is = entity.getContent();
try {
tokenResponse = JsonSerialization.readValue(is, AccessTokenResponse.class);
} finally {
try {
is.close();
} catch (java.io.IOException ignored) { }
}
return (tokenResponse);
}
}
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.jboss.logging.Logger;
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import java.io.IOException;
@@ -0,0 +1,33 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public interface CorsHeaders {
String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin";
String ACCESS_CONTROL_ALLOW_CREDENTIALS = "Access-Control-Allow-Credentials";
String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods";
String ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers";
String ACCESS_CONTROL_MAX_AGE = "Access-Control-Max-Age";
String ORIGIN = "Origin";
String ACCESS_CONTROL_REQUEST_METHOD = "Access-Control-Request-Method";
String ACCESS_CONTROL_REQUEST_HEADERS = "Access-Control-Request-Headers";
}
@@ -0,0 +1,369 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
import org.apache.http.conn.ssl.BrowserCompatHostnameVerifier;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.conn.ssl.StrictHostnameVerifier;
import org.apache.http.conn.ssl.X509HostnameVerifier;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.SingleClientConnManager;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.keycloak.representations.adapters.config.AdapterConfig;
import org.keycloak.common.util.EnvUtil;
import org.keycloak.common.util.KeystoreUtil;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.security.KeyStore;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* Abstraction for creating HttpClients. Allows SSL configuration.
*
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class HttpClientBuilder {
public static enum HostnameVerificationPolicy {
/**
* Hostname verification is not done on the server's certificate
*/
ANY,
/**
* Allows wildcards in subdomain names i.e. *.foo.com
*/
WILDCARD,
/**
* CN must match hostname connecting to
*/
STRICT
}
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
private static class PassthroughTrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
protected KeyStore truststore;
protected KeyStore clientKeyStore;
protected String clientPrivateKeyPassword;
protected boolean disableTrustManager;
protected boolean disableCookieCache = true;
protected HostnameVerificationPolicy policy = HostnameVerificationPolicy.WILDCARD;
protected SSLContext sslContext;
protected int connectionPoolSize = 100;
protected int maxPooledPerRoute = 0;
protected long connectionTTL = -1;
protected TimeUnit connectionTTLUnit = TimeUnit.MILLISECONDS;
protected HostnameVerifier verifier = null;
protected long socketTimeout = -1;
protected TimeUnit socketTimeoutUnits = TimeUnit.MILLISECONDS;
protected long establishConnectionTimeout = -1;
protected TimeUnit establishConnectionTimeoutUnits = TimeUnit.MILLISECONDS;
/**
* Socket inactivity timeout
*
* @param timeout
* @param unit
* @return
*/
public HttpClientBuilder socketTimeout(long timeout, TimeUnit unit)
{
this.socketTimeout = timeout;
this.socketTimeoutUnits = unit;
return this;
}
/**
* When trying to make an initial socket connection, what is the timeout?
*
* @param timeout
* @param unit
* @return
*/
public HttpClientBuilder establishConnectionTimeout(long timeout, TimeUnit unit)
{
this.establishConnectionTimeout = timeout;
this.establishConnectionTimeoutUnits = unit;
return this;
}
public HttpClientBuilder connectionTTL(long ttl, TimeUnit unit) {
this.connectionTTL = ttl;
this.connectionTTLUnit = unit;
return this;
}
public HttpClientBuilder maxPooledPerRoute(int maxPooledPerRoute) {
this.maxPooledPerRoute = maxPooledPerRoute;
return this;
}
public HttpClientBuilder connectionPoolSize(int connectionPoolSize) {
this.connectionPoolSize = connectionPoolSize;
return this;
}
/**
* Disable trust management and hostname verification. <i>NOTE</i> this is a security
* hole, so only set this option if you cannot or do not want to verify the identity of the
* host you are communicating with.
*/
public HttpClientBuilder disableTrustManager() {
this.disableTrustManager = true;
return this;
}
public HttpClientBuilder disableCookieCache() {
this.disableCookieCache = true;
return this;
}
/**
* SSL policy used to verify hostnames
*
* @param policy
* @return
*/
public HttpClientBuilder hostnameVerification(HostnameVerificationPolicy policy) {
this.policy = policy;
return this;
}
public HttpClientBuilder sslContext(SSLContext sslContext) {
this.sslContext = sslContext;
return this;
}
public HttpClientBuilder trustStore(KeyStore truststore) {
this.truststore = truststore;
return this;
}
public HttpClientBuilder keyStore(KeyStore keyStore, String password) {
this.clientKeyStore = keyStore;
this.clientPrivateKeyPassword = password;
return this;
}
public HttpClientBuilder keyStore(KeyStore keyStore, char[] password) {
this.clientKeyStore = keyStore;
this.clientPrivateKeyPassword = new String(password);
return this;
}
static class VerifierWrapper implements X509HostnameVerifier {
protected HostnameVerifier verifier;
VerifierWrapper(HostnameVerifier verifier) {
this.verifier = verifier;
}
@Override
public void verify(String host, SSLSocket ssl) throws IOException {
if (!verifier.verify(host, ssl.getSession())) throw new SSLException("Hostname verification failure");
}
@Override
public void verify(String host, X509Certificate cert) throws SSLException {
throw new SSLException("This verification path not implemented");
}
@Override
public void verify(String host, String[] cns, String[] subjectAlts) throws SSLException {
throw new SSLException("This verification path not implemented");
}
@Override
public boolean verify(String s, SSLSession sslSession) {
return verifier.verify(s, sslSession);
}
}
public HttpClient build() {
X509HostnameVerifier verifier = null;
if (this.verifier != null) verifier = new VerifierWrapper(this.verifier);
else {
switch (policy) {
case ANY:
verifier = new AllowAllHostnameVerifier();
break;
case WILDCARD:
verifier = new BrowserCompatHostnameVerifier();
break;
case STRICT:
verifier = new StrictHostnameVerifier();
break;
}
}
try {
SSLSocketFactory sslsf = null;
SSLContext theContext = sslContext;
if (disableTrustManager) {
theContext = SSLContext.getInstance("SSL");
theContext.init(null, new TrustManager[]{new PassthroughTrustManager()},
new SecureRandom());
verifier = new AllowAllHostnameVerifier();
sslsf = new SniSSLSocketFactory(theContext, verifier);
} else if (theContext != null) {
sslsf = new SniSSLSocketFactory(theContext, verifier);
} else if (clientKeyStore != null || truststore != null) {
sslsf = new SniSSLSocketFactory(SSLSocketFactory.TLS, clientKeyStore, clientPrivateKeyPassword, truststore, null, verifier);
} else {
final SSLContext tlsContext = SSLContext.getInstance(SSLSocketFactory.TLS);
tlsContext.init(null, null, null);
sslsf = new SniSSLSocketFactory(tlsContext, verifier);
}
SchemeRegistry registry = new SchemeRegistry();
registry.register(
new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
Scheme httpsScheme = new Scheme("https", 443, sslsf);
registry.register(httpsScheme);
ClientConnectionManager cm = null;
if (connectionPoolSize > 0) {
ThreadSafeClientConnManager tcm = new ThreadSafeClientConnManager(registry, connectionTTL, connectionTTLUnit);
tcm.setMaxTotal(connectionPoolSize);
if (maxPooledPerRoute == 0) maxPooledPerRoute = connectionPoolSize;
tcm.setDefaultMaxPerRoute(maxPooledPerRoute);
cm = tcm;
} else {
cm = new SingleClientConnManager(registry);
}
BasicHttpParams params = new BasicHttpParams();
if (socketTimeout > -1)
{
HttpConnectionParams.setSoTimeout(params, (int) socketTimeoutUnits.toMillis(socketTimeout));
}
if (establishConnectionTimeout > -1)
{
HttpConnectionParams.setConnectionTimeout(params, (int)establishConnectionTimeoutUnits.toMillis(establishConnectionTimeout));
}
DefaultHttpClient client = new DefaultHttpClient(cm, params);
if (disableCookieCache) {
client.setCookieStore(new CookieStore() {
@Override
public void addCookie(Cookie cookie) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public List<Cookie> getCookies() {
return Collections.emptyList();
}
@Override
public boolean clearExpired(Date date) {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void clear() {
//To change body of implemented methods use File | Settings | File Templates.
}
});
}
return client;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public HttpClient build(AdapterConfig adapterConfig) {
disableCookieCache(); // disable cookie cache as we don't want sticky sessions for load balancing
String truststorePath = adapterConfig.getTruststore();
if (truststorePath != null) {
truststorePath = EnvUtil.replace(truststorePath);
String truststorePassword = adapterConfig.getTruststorePassword();
try {
this.truststore = KeystoreUtil.loadKeyStore(truststorePath, truststorePassword);
} catch (Exception e) {
throw new RuntimeException("Failed to load truststore", e);
}
}
String clientKeystore = adapterConfig.getClientKeystore();
if (clientKeystore != null) {
clientKeystore = EnvUtil.replace(clientKeystore);
String clientKeystorePassword = adapterConfig.getClientKeystorePassword();
try {
KeyStore clientCertKeystore = KeystoreUtil.loadKeyStore(clientKeystore, clientKeystorePassword);
keyStore(clientCertKeystore, clientKeystorePassword);
} catch (Exception e) {
throw new RuntimeException("Failed to load keystore", e);
}
}
int size = 10;
if (adapterConfig.getConnectionPoolSize() > 0)
size = adapterConfig.getConnectionPoolSize();
HttpClientBuilder.HostnameVerificationPolicy policy = HttpClientBuilder.HostnameVerificationPolicy.WILDCARD;
if (adapterConfig.isAllowAnyHostname())
policy = HttpClientBuilder.HostnameVerificationPolicy.ANY;
connectionPoolSize(size);
hostnameVerification(policy);
if (adapterConfig.isDisableTrustManager()) {
disableTrustManager();
} else {
trustStore(truststore);
}
return build();
}
}
@@ -1,12 +1,12 @@
/*
* Copyright 2014 Red Hat Inc. and/or its affiliates and other contributors
* as indicated by the @author tags. All rights reserved.
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.apache.http.client.HttpClient;
@@ -57,6 +74,8 @@ public class KeycloakDeployment {
protected boolean alwaysRefreshToken;
protected boolean registerNodeAtStartup;
protected int registerNodePeriod;
protected boolean turnOffChangeSessionIdOnLogin;
protected volatile int notBefore;
public KeycloakDeployment() {
@@ -92,39 +111,17 @@ public class KeycloakDeployment {
public void setAuthServerBaseUrl(AdapterConfig config) {
this.authServerBaseUrl = config.getAuthServerUrl();
String authServerURLForBackendReqs = config.getAuthServerUrlForBackendRequests();
if (authServerBaseUrl == null && authServerURLForBackendReqs == null) return;
if (authServerBaseUrl == null) return;
URI authServerUri = null;
if (authServerBaseUrl != null) {
authServerUri = URI.create(authServerBaseUrl);
}
URI authServerUri = URI.create(authServerBaseUrl);
if (authServerUri == null || authServerUri.getHost() == null) {
if (authServerURLForBackendReqs != null) {
relativeUrls = RelativeUrlsUsed.BROWSER_ONLY;
KeycloakUriBuilder serverBuilder = KeycloakUriBuilder.fromUri(authServerURLForBackendReqs);
if (serverBuilder.getHost() == null || serverBuilder.getScheme() == null) {
throw new IllegalStateException("Relative URL not supported for auth-server-url-for-backend-requests option. URL used: "
+ authServerURLForBackendReqs + ", Client: " + config.getResource());
}
resolveNonBrowserUrls(serverBuilder);
} else {
relativeUrls = RelativeUrlsUsed.ALL_REQUESTS;
}
if (authServerUri.getHost() == null) {
relativeUrls = RelativeUrlsUsed.ALWAYS;
} else {
// We have absolute URI in config
relativeUrls = RelativeUrlsUsed.NEVER;
KeycloakUriBuilder serverBuilder = KeycloakUriBuilder.fromUri(authServerBaseUrl);
resolveBrowserUrls(serverBuilder);
if (authServerURLForBackendReqs == null) {
resolveNonBrowserUrls(serverBuilder);
} else {
serverBuilder = KeycloakUriBuilder.fromUri(authServerURLForBackendReqs);
resolveNonBrowserUrls(serverBuilder);
}
resolveUrls(serverBuilder);
}
}
@@ -133,23 +130,14 @@ public class KeycloakDeployment {
/**
* @param authUrlBuilder absolute URI
*/
protected void resolveBrowserUrls(KeycloakUriBuilder authUrlBuilder) {
protected void resolveUrls(KeycloakUriBuilder authUrlBuilder) {
if (log.isDebugEnabled()) {
log.debug("resolveBrowserUrls");
log.debug("resolveUrls");
}
String login = authUrlBuilder.clone().path(ServiceUrlConstants.AUTH_PATH).build(getRealm()).toString();
authUrl = KeycloakUriBuilder.fromUri(login);
realmInfoUrl = authUrlBuilder.clone().path(ServiceUrlConstants.REALM_INFO_PATH).build(getRealm()).toString();
}
/**
* @param authUrlBuilder absolute URI
*/
protected void resolveNonBrowserUrls(KeycloakUriBuilder authUrlBuilder) {
if (log.isDebugEnabled()) {
log.debug("resolveNonBrowserUrls");
}
tokenUrl = authUrlBuilder.clone().path(ServiceUrlConstants.TOKEN_PATH).build(getRealm()).toString();
logoutUrl = KeycloakUriBuilder.fromUri(authUrlBuilder.clone().path(ServiceUrlConstants.TOKEN_SERVICE_LOGOUT_PATH).build(getRealm()).toString());
@@ -361,4 +349,12 @@ public class KeycloakDeployment {
public void setPrincipalAttribute(String principalAttribute) {
this.principalAttribute = principalAttribute;
}
public boolean isTurnOffChangeSessionIdOnLogin() {
return turnOffChangeSessionIdOnLogin;
}
public void setTurnOffChangeSessionIdOnLogin(boolean turnOffChangeSessionIdOnLogin) {
this.turnOffChangeSessionIdOnLogin = turnOffChangeSessionIdOnLogin;
}
}
@@ -1,7 +1,24 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.jboss.logging.Logger;
import org.keycloak.adapters.authentication.ClientCredentialsProviderUtils;
import org.keycloak.common.enums.SslRequired;
@@ -81,13 +98,16 @@ public class KeycloakDeploymentBuilder {
if (realmKeyPem == null && adapterConfig.isBearerOnly() && adapterConfig.getAuthServerUrl() == null) {
throw new IllegalArgumentException("For bearer auth, you must set the realm-public-key or auth-server-url");
}
if (realmKeyPem == null || !deployment.isBearerOnly() || deployment.isRegisterNodeAtStartup() || deployment.getRegisterNodePeriod() != -1) {
if (realmKeyPem == null || !deployment.isBearerOnly() || deployment.isEnableBasicAuth() || deployment.isRegisterNodeAtStartup() || deployment.getRegisterNodePeriod() != -1) {
deployment.setClient(new HttpClientBuilder().build(adapterConfig));
}
if (adapterConfig.getAuthServerUrl() == null && (!deployment.isBearerOnly() || realmKeyPem == null)) {
throw new RuntimeException("You must specify auth-url");
}
deployment.setAuthServerBaseUrl(adapterConfig);
if (adapterConfig.getTurnOffChangeSessionIdOnLogin() != null) {
deployment.setTurnOffChangeSessionIdOnLogin(adapterConfig.getTurnOffChangeSessionIdOnLogin());
}
log.debug("Use authServerUrl: " + deployment.getAuthServerBaseUrl() + ", tokenUrl: " + deployment.getTokenUrl() + ", relativeUrls: " + deployment.getRelativeUrls());
return deployment;
@@ -100,7 +120,7 @@ public class KeycloakDeploymentBuilder {
public static AdapterConfig loadAdapterConfig(InputStream is) {
ObjectMapper mapper = new ObjectMapper(new SystemPropertiesJsonParserFactory());
mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_DEFAULT);
mapper.setSerializationInclusion(JsonInclude.Include.NON_DEFAULT);
AdapterConfig adapterConfig;
try {
adapterConfig = mapper.readValue(is, AdapterConfig.class);
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import java.io.IOException;
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.jboss.logging.Logger;
@@ -189,7 +206,7 @@ public class OAuthRequestAuthenticator {
tokenStore.saveRequest();
log.debug("Sending redirect to login page: " + redirect);
exchange.getResponse().setStatus(302);
exchange.getResponse().setCookie(deployment.getStateCookieName(), state, /* need to set path? */ null, null, -1, deployment.getSslRequired().isRequired(facade.getRequest().getRemoteAddr()), false);
exchange.getResponse().setCookie(deployment.getStateCookieName(), state, /* need to set path? */ null, null, -1, deployment.getSslRequired().isRequired(facade.getRequest().getRemoteAddr()), true);
exchange.getResponse().setHeader("Location", redirect);
return true;
}
@@ -293,7 +310,7 @@ public class OAuthRequestAuthenticator {
strippedOauthParametersRequestUri = stripOauthParametersFromRedirect();
try {
// For COOKIE store we don't have httpSessionId and single sign-out won't be available
String httpSessionId = deployment.getTokenStore() == TokenStore.SESSION ? reqAuthenticator.getHttpSessionId(true) : null;
String httpSessionId = deployment.getTokenStore() == TokenStore.SESSION ? reqAuthenticator.changeHttpSessionId(true) : null;
tokenResponse = ServerRequest.invokeAccessCodeToToken(deployment, code, strippedOauthParametersRequestUri, httpSessionId);
} catch (ServerRequest.HttpFailure failure) {
log.error("failed to turn code into token");
@@ -0,0 +1,63 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.keycloak.adapters.spi.AuthenticationError;
/**
* Object that describes the OIDC error that happened.
*
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class OIDCAuthenticationError implements AuthenticationError {
public static enum Reason {
NO_BEARER_TOKEN,
NO_REDIRECT_URI,
INVALID_STATE_COOKIE,
OAUTH_ERROR,
SSL_REQUIRED,
CODE_TO_TOKEN_FAILURE,
INVALID_TOKEN,
STALE_TOKEN,
NO_AUTHORIZATION_HEADER
}
private Reason reason;
private String description;
public OIDCAuthenticationError(Reason reason, String description) {
this.reason = reason;
this.description = description;
}
public Reason getReason() {
return reason;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
return "OIDCAuthenticationError [reason=" + reason + ", description=" + description + "]";
}
}
@@ -0,0 +1,32 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.keycloak.KeycloakSecurityContext;
import org.keycloak.adapters.spi.HttpFacade;
/**
* Bridge between core adapter and HTTP Engine
*
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public interface OIDCHttpFacade extends HttpFacade {
KeycloakSecurityContext getSecurityContext();
}
@@ -0,0 +1,29 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.keycloak.KeycloakSecurityContext;
import org.keycloak.adapters.spi.KeycloakAccount;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public interface OidcKeycloakAccount extends KeycloakAccount {
KeycloakSecurityContext getKeycloakSecurityContext();
}
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.jboss.logging.Logger;
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.jboss.logging.Logger;
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.jboss.logging.Logger;
@@ -137,16 +154,24 @@ public abstract class RequestAuthenticator {
RefreshableKeycloakSecurityContext session = new RefreshableKeycloakSecurityContext(deployment, tokenStore, oauth.getTokenString(), oauth.getToken(), oauth.getIdTokenString(), oauth.getIdToken(), oauth.getRefreshToken());
final KeycloakPrincipal<RefreshableKeycloakSecurityContext> principal = new KeycloakPrincipal<RefreshableKeycloakSecurityContext>(AdapterUtils.getPrincipalName(deployment, oauth.getToken()), session);
completeOAuthAuthentication(principal);
log.debugv("User ''{0}'' invoking ''{1}'' on client ''{2}''", principal.getName(), facade.getRequest().getURI(), deployment.getResourceName());
}
protected abstract void completeOAuthAuthentication(KeycloakPrincipal<RefreshableKeycloakSecurityContext> principal);
protected abstract void completeBearerAuthentication(KeycloakPrincipal<RefreshableKeycloakSecurityContext> principal, String method);
protected abstract String getHttpSessionId(boolean create);
/**
* After code is received, we change the session id if possible to guard against https://www.owasp.org/index.php/Session_Fixation
* @param create
* @return
*/
protected abstract String changeHttpSessionId(boolean create);
protected void completeAuthentication(BearerTokenRequestAuthenticator bearer, String method) {
RefreshableKeycloakSecurityContext session = new RefreshableKeycloakSecurityContext(deployment, null, bearer.getTokenString(), bearer.getToken(), null, null, null);
final KeycloakPrincipal<RefreshableKeycloakSecurityContext> principal = new KeycloakPrincipal<RefreshableKeycloakSecurityContext>(AdapterUtils.getPrincipalName(deployment, bearer.getToken()), session);
completeBearerAuthentication(principal, method);
log.debugv("User ''{0}'' invoking ''{1}'' on client ''{2}''", principal.getName(), facade.getRequest().getURI(), deployment.getResourceName());
}
}
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.apache.http.HttpEntity;
@@ -0,0 +1,134 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.apache.http.HttpHost;
import org.apache.http.conn.scheme.HostNameResolver;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.conn.ssl.X509HostnameVerifier;
import org.apache.http.protocol.HttpContext;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.security.AccessController;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivilegedExceptionAction;
import java.security.SecureRandom;
import java.security.UnrecoverableKeyException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
*/
public class SniSSLSocketFactory extends SSLSocketFactory {
private static Logger log = Logger.getLogger(SniSSLSocketFactory.class.getName());
public SniSSLSocketFactory(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, HostNameResolver nameResolver) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
super(algorithm, keystore, keyPassword, truststore, random, nameResolver);
}
public SniSSLSocketFactory(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, TrustStrategy trustStrategy, X509HostnameVerifier hostnameVerifier) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
super(algorithm, keystore, keyPassword, truststore, random, trustStrategy, hostnameVerifier);
}
public SniSSLSocketFactory(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, X509HostnameVerifier hostnameVerifier) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
super(algorithm, keystore, keyPassword, truststore, random, hostnameVerifier);
}
public SniSSLSocketFactory(KeyStore keystore, String keystorePassword, KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
super(keystore, keystorePassword, truststore);
}
public SniSSLSocketFactory(KeyStore keystore, String keystorePassword) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
super(keystore, keystorePassword);
}
public SniSSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
super(truststore);
}
public SniSSLSocketFactory(TrustStrategy trustStrategy, X509HostnameVerifier hostnameVerifier) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
super(trustStrategy, hostnameVerifier);
}
public SniSSLSocketFactory(TrustStrategy trustStrategy) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
super(trustStrategy);
}
public SniSSLSocketFactory(SSLContext sslContext) {
super(sslContext);
}
public SniSSLSocketFactory(SSLContext sslContext, HostNameResolver nameResolver) {
super(sslContext, nameResolver);
}
public SniSSLSocketFactory(SSLContext sslContext, X509HostnameVerifier hostnameVerifier) {
super(sslContext, hostnameVerifier);
}
public SniSSLSocketFactory(SSLContext sslContext, String[] supportedProtocols, String[] supportedCipherSuites, X509HostnameVerifier hostnameVerifier) {
super(sslContext, supportedProtocols, supportedCipherSuites, hostnameVerifier);
}
public SniSSLSocketFactory(javax.net.ssl.SSLSocketFactory socketfactory, X509HostnameVerifier hostnameVerifier) {
super(socketfactory, hostnameVerifier);
}
public SniSSLSocketFactory(javax.net.ssl.SSLSocketFactory socketfactory, String[] supportedProtocols, String[] supportedCipherSuites, X509HostnameVerifier hostnameVerifier) {
super(socketfactory, supportedProtocols, supportedCipherSuites, hostnameVerifier);
}
@Override
public Socket connectSocket(int connectTimeout, Socket socket, HttpHost host, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpContext context) throws IOException {
return super.connectSocket(connectTimeout, applySNI(socket, host.getHostName()), host, remoteAddress, localAddress, context);
}
@Override
public Socket createLayeredSocket(Socket socket, String target, int port, HttpContext context) throws IOException {
return super.createLayeredSocket(applySNI(socket, target), target, port, context);
}
private Socket applySNI(final Socket socket, String hostname) {
if (socket instanceof SSLSocket) {
try {
Method setHostMethod = AccessController.doPrivileged(new PrivilegedExceptionAction<Method>() {
public Method run() throws NoSuchMethodException {
return socket.getClass().getMethod("setHost", String.class);
}
});
setHostMethod.invoke(socket, hostname);
log.finest("Applied SNI to socket for: " + hostname);
} catch (Exception e) {
log.log(Level.WARNING, "Failed to apply SNI to SSLSocket", e);
}
}
return socket;
}
}
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.authentication;
import java.util.Map;
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.authentication;
import java.util.HashMap;
@@ -0,0 +1,66 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.authentication;
import java.util.Map;
import org.jboss.logging.Logger;
import org.keycloak.OAuth2Constants;
import org.keycloak.adapters.KeycloakDeployment;
import org.keycloak.representations.idm.CredentialRepresentation;
import org.keycloak.util.BasicAuthHelper;
/**
* Traditional OAuth2 authentication of clients based on client_id and client_secret
*
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class ClientIdAndSecretCredentialsProvider implements ClientCredentialsProvider {
private static Logger logger = Logger.getLogger(ClientCredentialsProviderUtils.class);
public static final String PROVIDER_ID = CredentialRepresentation.SECRET;
private String clientSecret;
@Override
public String getId() {
return PROVIDER_ID;
}
@Override
public void init(KeycloakDeployment deployment, Object config) {
clientSecret = (String) config;
}
@Override
public void setClientCredentials(KeycloakDeployment deployment, Map<String, String> requestHeaders, Map<String, String> formParams) {
String clientId = deployment.getResourceName();
if (!deployment.isPublicClient()) {
if (clientSecret != null) {
String authorization = BasicAuthHelper.createHeader(clientId, clientSecret);
requestHeaders.put("Authorization", authorization);
} else {
logger.warnf("Client '%s' doesn't have secret available", clientId);
}
} else {
formParams.put(OAuth2Constants.CLIENT_ID, clientId);
}
}
}
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.authentication;
import java.security.PrivateKey;
@@ -107,6 +124,7 @@ public class JWTClientCredentialsProvider implements ClientCredentialsProvider {
JsonWebToken reqToken = new JsonWebToken();
reqToken.id(AdapterUtils.generateId());
reqToken.issuer(clientId);
reqToken.subject(clientId);
reqToken.audience(realmInfoUrl);
int now = Time.currentTime();
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jaas;
import java.io.InputStream;
@@ -0,0 +1,45 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jaas;
import org.jboss.logging.Logger;
import org.keycloak.common.VerificationException;
/**
* Login module, which allows to authenticate Keycloak access token in environments, which rely on JAAS
* <p/>
* It expects login based on username and password where username doesn't matter and password is keycloak access token.
*
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class BearerTokenLoginModule extends AbstractKeycloakLoginModule {
private static final Logger log = Logger.getLogger(BearerTokenLoginModule.class);
@Override
protected Auth doAuth(String username, String password) throws VerificationException {
// Should do some checking of authenticated username if it's equivalent to passed value?
return bearerAuth(password);
}
@Override
protected Logger getLogger() {
return log;
}
}
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jaas;
import java.io.IOException;
@@ -0,0 +1,53 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jaas;
import java.io.Serializable;
import java.security.Principal;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class RolePrincipal implements Principal, Serializable {
private String roleName = null;
public RolePrincipal(String roleName) {
this.roleName = roleName;
}
public boolean equals (Object p) {
if (! (p instanceof RolePrincipal))
return false;
return getName().equals(((RolePrincipal)p).getName());
}
public int hashCode () {
return getName().hashCode();
}
public String getName () {
return this.roleName;
}
public String toString ()
{
return getName();
}
}
@@ -0,0 +1,19 @@
#
# Copyright 2016 Red Hat, Inc. and/or its affiliates
# and other contributors as indicated by the @author tags.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
org.keycloak.adapters.authentication.ClientIdAndSecretCredentialsProvider
org.keycloak.adapters.authentication.JWTClientCredentialsProvider
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
@@ -37,7 +54,7 @@ public class KeycloakDeploymentBuilderTest {
assertEquals("234234-234234-234234", deployment.getResourceCredentials().get("secret"));
assertEquals(ClientIdAndSecretCredentialsProvider.PROVIDER_ID, deployment.getClientAuthenticator().getId());
assertEquals(20, ((ThreadSafeClientConnManager) deployment.getClient().getConnectionManager()).getMaxTotal());
assertEquals("https://backend:8443/auth/realms/demo/protocol/openid-connect/token", deployment.getTokenUrl());
assertEquals("https://localhost:8443/auth/realms/demo/protocol/openid-connect/token", deployment.getTokenUrl());
assertEquals(RelativeUrlsUsed.NEVER, deployment.getRelativeUrls());
assertTrue(deployment.isAlwaysRefreshToken());
assertTrue(deployment.isRegisterNodeAtStartup());
@@ -0,0 +1,32 @@
{
"realm": "demo",
"resource": "customer-portal",
"realm-public-key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB",
"auth-server-url": "https://localhost:8443/auth",
"ssl-required": "external",
"use-resource-role-mappings": true,
"enable-cors": true,
"cors-max-age": 1000,
"cors-allowed-methods": "POST, PUT, DELETE, GET",
"cors-allowed-headers": "X-Custom, X-Custom2",
"bearer-only": true,
"public-client": true,
"enable-basic-auth": true,
"expose-token": true,
"credentials": {
"secret": "234234-234234-234234"
},
"connection-pool-size": 20,
"disable-trust-manager": true,
"allow-any-hostname": true,
"truststore": "classpath:/cacerts.jks",
"truststore-password": "changeit",
"client-keystore": "classpath:/keystore.jks",
"client-keystore-password": "storepass",
"client-key-password": "keypass",
"always-refresh-token": true,
"register-node-at-startup": true,
"register-node-period": 1000,
"token-store": "cookie",
"principal-attribute": "email"
}
+102
View File
@@ -0,0 +1,102 @@
<?xml version="1.0"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-as7-integration-pom</artifactId>
<groupId>org.keycloak</groupId>
<version>1.9.4.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-as7-adapter-spi</artifactId>
<name>Keycloak AS7 SPI</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-spi</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.servlet</groupId>
<artifactId>jboss-servlet-api_3.0_spec</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>${jboss.logging.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.web</groupId>
<artifactId>jbossweb</artifactId>
<version>7.0.17.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-web</artifactId>
<version>7.1.2.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-tomcat-adapter-spi</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>catalina</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jbossweb;
import org.apache.catalina.Realm;
@@ -125,7 +142,7 @@ public class JBossWebPrincipalFactory extends GenericPrincipalFactory {
Iterator<Principal> iter = principals.iterator();
while (iter.hasNext()) {
Object next = iter.next();
if ((next instanceof Group) == false)
if (!(next instanceof Group))
continue;
Group grp = (Group) next;
if (grp.getName().equals(name)) {
@@ -0,0 +1,46 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jbossweb;
import org.apache.catalina.Realm;
import org.junit.Assert;
import org.junit.Test;
import javax.security.auth.Subject;
import java.lang.reflect.Constructor;
import java.security.Principal;
import java.util.List;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class JBossWebPrincipalFactoryTest {
@Test
public void test() {
Constructor constructor = JBossWebPrincipalFactory.findJBossGenericPrincipalConstructor();
Assert.assertNotNull(constructor);
Assert.assertEquals(Realm.class, constructor.getParameterTypes()[0]);
Assert.assertEquals(String.class, constructor.getParameterTypes()[1]);
Assert.assertEquals(List.class, constructor.getParameterTypes()[3]);
Assert.assertEquals(Principal.class, constructor.getParameterTypes()[4]);
Assert.assertEquals(Object.class, constructor.getParameterTypes()[6]);
Assert.assertEquals(Subject.class, constructor.getParameterTypes()[8]);
}
}
+134
View File
@@ -0,0 +1,134 @@
<?xml version="1.0"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-as7-integration-pom</artifactId>
<groupId>org.keycloak</groupId>
<version>1.9.4.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-as7-adapter</artifactId>
<name>Keycloak AS7 Integration</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-as7-adapter-spi</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-spi</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-core</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-jboss-adapter-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.servlet</groupId>
<artifactId>jboss-servlet-api_3.0_spec</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>${jboss.logging.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.web</groupId>
<artifactId>jbossweb</artifactId>
<version>7.0.17.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-web</artifactId>
<version>7.1.2.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-tomcat-core-adapter</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>catalina</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,72 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jbossweb;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.deploy.LoginConfig;
import org.apache.catalina.realm.GenericPrincipal;
import org.keycloak.adapters.tomcat.AbstractKeycloakAuthenticatorValve;
import org.keycloak.adapters.tomcat.GenericPrincipalFactory;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.security.Principal;
import java.util.List;
/**
* Keycloak authentication valve
*
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class KeycloakAuthenticatorValve extends AbstractKeycloakAuthenticatorValve {
public boolean authenticate(Request request, HttpServletResponse response, LoginConfig config) throws java.io.IOException {
return authenticateInternal(request, response, config);
}
@Override
protected boolean forwardToErrorPageInternal(Request request, HttpServletResponse response, Object loginConfig) throws IOException {
if (loginConfig == null) return false;
LoginConfig config = (LoginConfig)loginConfig;
if (config.getErrorPage() == null) return false;
forwardToErrorPage(request, (Response)response, config);
return true;
}
@Override
public void start() throws LifecycleException {
StandardContext standardContext = (StandardContext) context;
standardContext.addLifecycleListener(this);
super.start();
}
public void logout(Request request) {
logoutInternal(request);
}
@Override
protected GenericPrincipalFactory createPrincipalFactory() {
return new JBossWebPrincipalFactory();
}
}
+116
View File
@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-as7-integration-pom</artifactId>
<version>1.9.4.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>keycloak-as7-subsystem</artifactId>
<name>Keycloak AS7 Subsystem</name>
<description/>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.8.1</version>
<configuration>
<redirectTestOutputToFile>false</redirectTestOutputToFile>
<enableAssertions>true</enableAssertions>
<argLine>-Xmx512m</argLine>
<systemProperties>
<property>
<name>jboss.home</name>
<value>${jboss.home}</value>
</property>
</systemProperties>
<includes>
<include>**/*TestCase.java</include>
</includes>
<forkMode>once</forkMode>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-as7-adapter</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-naming</artifactId>
<version>${jboss.as.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-server</artifactId>
<version>${jboss.as.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-ee</artifactId>
<version>${jboss.as.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-web</artifactId>
<version>${jboss.as.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.1.0.GA</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging-processor</artifactId>
<!-- This is a compile-time dependency of this project, but is not needed at compile or runtime by other
projects that depend on this project.-->
<scope>provided</scope>
<optional>true</optional>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.msc</groupId>
<artifactId>jboss-msc</artifactId>
<version>1.0.2.GA</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,62 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AbstractAddStepHandler;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.ServiceVerificationHandler;
import org.jboss.dmr.ModelNode;
import org.jboss.msc.service.ServiceController;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
/**
* Add a credential to a deployment.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2014 Red Hat Inc.
*/
public class CredentialAddHandler extends AbstractAddStepHandler {
protected Collection<AttributeDefinition> attributes = new LinkedList<>();
public CredentialAddHandler(AttributeDefinition... attrs) {
for (AttributeDefinition attr : attrs) {
attributes.add(attr);
}
}
@Override
protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException {
if (attributes != null) {
for (AttributeDefinition attr : attributes) {
attr.validateAndSet(operation, model);
}
}
}
@Override
protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model, ServiceVerificationHandler verificationHandler, List<ServiceController<?>> newControllers) throws OperationFailedException {
KeycloakAdapterConfigService ckService = KeycloakAdapterConfigService.getInstance();
ckService.addCredential(operation, context.resolveExpressions(model));
}
}
@@ -0,0 +1,63 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
import org.jboss.as.controller.SimpleResourceDefinition;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.as.controller.operations.common.GenericSubsystemDescribeHandler;
import org.jboss.as.controller.operations.validation.StringLengthValidator;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.controller.registry.OperationEntry;
import org.jboss.dmr.ModelType;
/**
* Defines attributes and operations for a credential.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
public class CredentialDefinition extends SimpleResourceDefinition {
public static final String TAG_NAME = "credential";
protected static final AttributeDefinition VALUE =
new SimpleAttributeDefinitionBuilder("value", ModelType.STRING, false)
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, false, true))
.build();
public CredentialDefinition() {
super(PathElement.pathElement(TAG_NAME),
KeycloakExtension.getResourceDescriptionResolver(TAG_NAME),
new CredentialAddHandler(VALUE),
CredentialRemoveHandler.INSTANCE);
}
@Override
public void registerOperations(ManagementResourceRegistration resourceRegistration) {
super.registerOperations(resourceRegistration);
resourceRegistration.registerOperationHandler(ModelDescriptionConstants.DESCRIBE, GenericSubsystemDescribeHandler.INSTANCE, GenericSubsystemDescribeHandler.INSTANCE, false, OperationEntry.EntryType.PRIVATE);
}
@Override
public void registerAttributes(ManagementResourceRegistration resourceRegistration) {
super.registerAttributes(resourceRegistration);
resourceRegistration.registerReadWriteAttribute(VALUE, null, new CredentialReadWriteAttributeHandler());
}
}
@@ -0,0 +1,50 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AbstractWriteAttributeHandler;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.dmr.ModelNode;
/**
* Update a credential value.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2014 Red Hat Inc.
*/
public class CredentialReadWriteAttributeHandler extends AbstractWriteAttributeHandler<KeycloakAdapterConfigService> {
@Override
protected boolean applyUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName,
ModelNode resolvedValue, ModelNode currentValue, AbstractWriteAttributeHandler.HandbackHolder<KeycloakAdapterConfigService> hh) throws OperationFailedException {
KeycloakAdapterConfigService ckService = KeycloakAdapterConfigService.getInstance();
ckService.updateCredential(operation, attributeName, resolvedValue);
hh.setHandback(ckService);
return false;
}
@Override
protected void revertUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName,
ModelNode valueToRestore, ModelNode valueToRevert, KeycloakAdapterConfigService ckService) throws OperationFailedException {
ckService.updateCredential(operation, attributeName, valueToRestore);
}
}
@@ -0,0 +1,42 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AbstractRemoveStepHandler;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.dmr.ModelNode;
/**
* Remove a credential from a deployment.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2014 Red Hat Inc.
*/
public final class CredentialRemoveHandler extends AbstractRemoveStepHandler {
public static CredentialRemoveHandler INSTANCE = new CredentialRemoveHandler();
private CredentialRemoveHandler() {}
@Override
protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
KeycloakAdapterConfigService ckService = KeycloakAdapterConfigService.getInstance();
ckService.removeCredential(operation);
}
}
@@ -0,0 +1,129 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.server.deployment.DeploymentPhaseContext;
import org.jboss.as.server.deployment.DeploymentUnit;
import org.jboss.as.server.deployment.DeploymentUnitProcessingException;
import org.jboss.as.server.deployment.DeploymentUnitProcessor;
import org.jboss.as.web.deployment.WarMetaData;
import org.jboss.logging.Logger;
import org.jboss.metadata.javaee.spec.ParamValueMetaData;
import org.jboss.metadata.web.jboss.JBossWebMetaData;
import org.jboss.metadata.web.jboss.ValveMetaData;
import org.jboss.metadata.web.spec.LoginConfigMetaData;
import org.keycloak.adapters.jbossweb.KeycloakAuthenticatorValve;
import org.keycloak.subsystem.as7.logging.KeycloakLogger;
import java.util.ArrayList;
import java.util.List;
/**
* Pass authentication data (keycloak.json) as a servlet context param so it can be read by the KeycloakServletExtension.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2014 Red Hat Inc.
*/
public class KeycloakAdapterConfigDeploymentProcessor implements DeploymentUnitProcessor {
protected Logger log = Logger.getLogger(KeycloakAdapterConfigDeploymentProcessor.class);
// This param name is defined again in Keycloak Undertow Integration class
// org.keycloak.adapters.undertow.KeycloakServletExtension. We have this value in
// two places to avoid dependency between Keycloak Subsystem and Keyclaok Undertow Integration.
public static final String AUTH_DATA_PARAM_NAME = "org.keycloak.json.adapterConfig";
@Override
public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
String deploymentName = deploymentUnit.getName();
// if it's not a web-app there's nothing to secure
WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
if (warMetaData == null) {
return;
}
JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
if (webMetaData == null) {
webMetaData = new JBossWebMetaData();
warMetaData.setMergedJBossWebMetaData(webMetaData);
}
KeycloakAdapterConfigService service = KeycloakAdapterConfigService.getInstance();
// otherwise
LoginConfigMetaData loginConfig = webMetaData.getLoginConfig();
boolean hasSubsystemConfig = service.isSecureDeployment(deploymentName);
boolean webRequiresKC = loginConfig != null && "KEYCLOAK".equalsIgnoreCase(loginConfig.getAuthMethod());
if (hasSubsystemConfig || webRequiresKC) {
log.debug("Setting up KEYCLOAK auth method for WAR: " + deploymentName);
// if secure-deployment configuration exists for web app, we force KEYCLOAK auth method on it
if (hasSubsystemConfig) {
addJSONData(service.getJSON(deploymentName), warMetaData);
if (loginConfig != null) {
loginConfig.setAuthMethod("KEYCLOAK");
loginConfig.setRealmName(service.getRealmName(deploymentName));
} else {
log.warn("Failed to set up KEYCLOAK auth method for WAR: " + deploymentName + " (loginConfig == null)");
}
}
addValve(webMetaData);
KeycloakLogger.ROOT_LOGGER.deploymentSecured(deploymentName);
}
}
private void addValve(JBossWebMetaData webMetaData) {
List<ValveMetaData> valves = webMetaData.getValves();
if (valves == null) {
valves = new ArrayList<ValveMetaData>(1);
webMetaData.setValves(valves);
}
ValveMetaData valve = new ValveMetaData();
valve.setValveClass(KeycloakAuthenticatorValve.class.getName());
valve.setModule("org.keycloak.keycloak-as7-adapter");
//log.info("******* adding Keycloak valve to: " + deploymentName);
valves.add(valve);
}
private void addJSONData(String json, WarMetaData warMetaData) {
JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
if (webMetaData == null) {
webMetaData = new JBossWebMetaData();
warMetaData.setMergedJBossWebMetaData(webMetaData);
}
List<ParamValueMetaData> contextParams = webMetaData.getContextParams();
if (contextParams == null) {
contextParams = new ArrayList<ParamValueMetaData>();
}
ParamValueMetaData param = new ParamValueMetaData();
param.setParamName(AUTH_DATA_PARAM_NAME);
param.setParamValue(json);
contextParams.add(param);
webMetaData.setContextParams(contextParams);
}
@Override
public void undeploy(DeploymentUnit du) {
}
}
@@ -0,0 +1,192 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.Property;
import org.jboss.logging.Logger;
import java.util.HashMap;
import java.util.Map;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADDRESS;
/**
* This service keeps track of the entire Keycloak management model so as to provide
* adapter configuration to each deployment at deploy time.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
public final class KeycloakAdapterConfigService {
protected Logger log = Logger.getLogger(KeycloakAdapterConfigService.class);
private static final String CREDENTIALS_JSON_NAME = "credentials";
private static final KeycloakAdapterConfigService INSTANCE = new KeycloakAdapterConfigService();
public static KeycloakAdapterConfigService getInstance() {
return INSTANCE;
}
private final Map<String, ModelNode> realms = new HashMap<String, ModelNode>();
// keycloak-secured deployments
private final Map<String, ModelNode> secureDeployments = new HashMap<String, ModelNode>();
private KeycloakAdapterConfigService() {
}
public void addRealm(ModelNode operation, ModelNode model) {
this.realms.put(realmNameFromOp(operation), model.clone());
}
public void updateRealm(ModelNode operation, String attrName, ModelNode resolvedValue) {
ModelNode realm = this.realms.get(realmNameFromOp(operation));
realm.get(attrName).set(resolvedValue);
}
public void removeRealm(ModelNode operation) {
this.realms.remove(realmNameFromOp(operation));
}
public void addSecureDeployment(ModelNode operation, ModelNode model) {
ModelNode deployment = model.clone();
this.secureDeployments.put(deploymentNameFromOp(operation), deployment);
}
public void updateSecureDeployment(ModelNode operation, String attrName, ModelNode resolvedValue) {
ModelNode deployment = this.secureDeployments.get(deploymentNameFromOp(operation));
deployment.get(attrName).set(resolvedValue);
}
public void removeSecureDeployment(ModelNode operation) {
this.secureDeployments.remove(deploymentNameFromOp(operation));
}
public void addCredential(ModelNode operation, ModelNode model) {
ModelNode credentials = credentialsFromOp(operation);
if (!credentials.isDefined()) {
credentials = new ModelNode();
}
String credentialName = credentialNameFromOp(operation);
if (!credentialName.contains(".")) {
credentials.get(credentialName).set(model.get("value").asString());
} else {
String[] parts = credentialName.split("\\.");
String provider = parts[0];
String property = parts[1];
ModelNode credential = credentials.get(provider);
if (!credential.isDefined()) {
credential = new ModelNode();
}
credential.get(property).set(model.get("value").asString());
credentials.set(provider, credential);
}
ModelNode deployment = this.secureDeployments.get(deploymentNameFromOp(operation));
deployment.get(CREDENTIALS_JSON_NAME).set(credentials);
}
public void removeCredential(ModelNode operation) {
ModelNode credentials = credentialsFromOp(operation);
if (!credentials.isDefined()) {
throw new RuntimeException("Can not remove credential. No credential defined for deployment in op " + operation.toString());
}
String credentialName = credentialNameFromOp(operation);
credentials.remove(credentialName);
}
public void updateCredential(ModelNode operation, String attrName, ModelNode resolvedValue) {
ModelNode credentials = credentialsFromOp(operation);
if (!credentials.isDefined()) {
throw new RuntimeException("Can not update credential. No credential defined for deployment in op " + operation.toString());
}
String credentialName = credentialNameFromOp(operation);
credentials.get(credentialName).set(resolvedValue);
}
private ModelNode credentialsFromOp(ModelNode operation) {
ModelNode deployment = this.secureDeployments.get(deploymentNameFromOp(operation));
return deployment.get(CREDENTIALS_JSON_NAME);
}
private String realmNameFromOp(ModelNode operation) {
return valueFromOpAddress(RealmDefinition.TAG_NAME, operation);
}
private String deploymentNameFromOp(ModelNode operation) {
return valueFromOpAddress(SecureDeploymentDefinition.TAG_NAME, operation);
}
private String credentialNameFromOp(ModelNode operation) {
return valueFromOpAddress(CredentialDefinition.TAG_NAME, operation);
}
private String valueFromOpAddress(String addrElement, ModelNode operation) {
String deploymentName = getValueOfAddrElement(operation.get(ADDRESS), addrElement);
if (deploymentName == null) throw new RuntimeException("Can't find '" + addrElement + "' in address " + operation.toString());
return deploymentName;
}
private String getValueOfAddrElement(ModelNode address, String elementName) {
for (ModelNode element : address.asList()) {
if (element.has(elementName)) return element.get(elementName).asString();
}
return null;
}
public String getRealmName(String deploymentName) {
ModelNode deployment = this.secureDeployments.get(deploymentName);
return deployment.get(RealmDefinition.TAG_NAME).asString();
}
public String getJSON(String deploymentName) {
ModelNode deployment = this.secureDeployments.get(deploymentName);
String realmName = deployment.get(RealmDefinition.TAG_NAME).asString();
ModelNode realm = this.realms.get(realmName);
ModelNode json = new ModelNode();
json.get(RealmDefinition.TAG_NAME).set(realmName);
// Realm values set first. Some can be overridden by deployment values.
if (realm != null) setJSONValues(json, realm);
setJSONValues(json, deployment);
return json.toJSONString(true);
}
private void setJSONValues(ModelNode json, ModelNode values) {
for (Property prop : values.asPropertyList()) {
String name = prop.getName();
ModelNode value = prop.getValue();
if (value.isDefined()) {
json.get(name).set(value);
}
}
}
public boolean isSecureDeployment(String deploymentName) {
//log.info("********* CHECK KEYCLOAK DEPLOYMENT: deployments.size()" + deployments.size());
return this.secureDeployments.containsKey(deploymentName);
}
}
@@ -0,0 +1,86 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.server.deployment.Attachments;
import org.jboss.as.server.deployment.DeploymentPhaseContext;
import org.jboss.as.server.deployment.DeploymentUnit;
import org.jboss.as.server.deployment.DeploymentUnitProcessingException;
import org.jboss.as.server.deployment.DeploymentUnitProcessor;
import org.jboss.as.server.deployment.module.ModuleDependency;
import org.jboss.as.server.deployment.module.ModuleSpecification;
import org.jboss.as.web.deployment.WarMetaData;
import org.jboss.metadata.web.jboss.JBossWebMetaData;
import org.jboss.metadata.web.spec.LoginConfigMetaData;
import org.jboss.modules.Module;
import org.jboss.modules.ModuleIdentifier;
import org.jboss.modules.ModuleLoader;
/**
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
public abstract class KeycloakDependencyProcessor implements DeploymentUnitProcessor {
private static final ModuleIdentifier KEYCLOAK_JBOSS_CORE_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-jboss-adapter-core");
private static final ModuleIdentifier KEYCLOAK_CORE_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-adapter-core");
private static final ModuleIdentifier KEYCLOAK_CORE = ModuleIdentifier.create("org.keycloak.keycloak-core");
private static final ModuleIdentifier KEYCLOAK_COMMON = ModuleIdentifier.create("org.keycloak.keycloak-common");
@Override
public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
String deploymentName = deploymentUnit.getName();
if (!KeycloakAdapterConfigService.getInstance().isSecureDeployment(deploymentName)) {
WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
if (warMetaData == null) {
return;
}
JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
if (webMetaData == null) {
return;
}
LoginConfigMetaData loginConfig = webMetaData.getLoginConfig();
if (loginConfig == null) return;
if (loginConfig.getAuthMethod() == null) return;
if (!loginConfig.getAuthMethod().equals("KEYCLOAK")) return;
}
final ModuleSpecification moduleSpecification = deploymentUnit.getAttachment(Attachments.MODULE_SPECIFICATION);
final ModuleLoader moduleLoader = Module.getBootModuleLoader();
addCommonModules(moduleSpecification, moduleLoader);
addPlatformSpecificModules(moduleSpecification, moduleLoader);
}
private void addCommonModules(ModuleSpecification moduleSpecification, ModuleLoader moduleLoader) {
// ModuleDependency(ModuleLoader moduleLoader, ModuleIdentifier identifier, boolean optional, boolean export, boolean importServices, boolean userSpecified)
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_JBOSS_CORE_ADAPTER, false, false, false, false));
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_CORE_ADAPTER, false, false, false, false));
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_CORE, false, false, false, false));
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_COMMON, false, false, false, false));
}
abstract protected void addPlatformSpecificModules(ModuleSpecification moduleSpecification, ModuleLoader moduleLoader);
@Override
public void undeploy(DeploymentUnit du) {
}
}
@@ -0,0 +1,36 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.server.deployment.module.ModuleDependency;
import org.jboss.as.server.deployment.module.ModuleSpecification;
import org.jboss.modules.ModuleIdentifier;
import org.jboss.modules.ModuleLoader;
/**
* @author <a href="mailto:marko.strukelj@gmail.com">Marko Strukelj</a>
*/
public class KeycloakDependencyProcessorAS7 extends KeycloakDependencyProcessor {
private static final ModuleIdentifier KEYCLOAK_AS7_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-as7-adapter");
@Override
protected void addPlatformSpecificModules(ModuleSpecification moduleSpecification, ModuleLoader moduleLoader) {
// ModuleDependency(ModuleLoader moduleLoader, ModuleIdentifier identifier, boolean optional, boolean export, boolean importServices, boolean userSpecified)
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_AS7_ADAPTER, false, false, true, false));
}}
@@ -0,0 +1,84 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.Extension;
import org.jboss.as.controller.ExtensionContext;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.ResourceDefinition;
import org.jboss.as.controller.SubsystemRegistration;
import org.jboss.as.controller.descriptions.StandardResourceDescriptionResolver;
import org.jboss.as.controller.parsing.ExtensionParsingContext;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.keycloak.subsystem.as7.logging.KeycloakLogger;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SUBSYSTEM;
/**
* Main Extension class for the subsystem.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
public class KeycloakExtension implements Extension {
public static final String SUBSYSTEM_NAME = "keycloak";
public static final String NAMESPACE = "urn:jboss:domain:keycloak:1.1";
private static final KeycloakSubsystemParser PARSER = new KeycloakSubsystemParser();
static final PathElement PATH_SUBSYSTEM = PathElement.pathElement(SUBSYSTEM, SUBSYSTEM_NAME);
private static final String RESOURCE_NAME = KeycloakExtension.class.getPackage().getName() + ".LocalDescriptions";
private static final int MGMT_API_VERSION_MAJOR = 1;
private static final int MGMT_API_VERSION_MINOR = 1;
static final PathElement SUBSYSTEM_PATH = PathElement.pathElement(SUBSYSTEM, SUBSYSTEM_NAME);
private static final ResourceDefinition KEYCLOAK_SUBSYSTEM_RESOURCE = new KeycloakSubsystemDefinition();
static final RealmDefinition REALM_DEFINITION = new RealmDefinition();
static final SecureDeploymentDefinition SECURE_DEPLOYMENT_DEFINITION = new SecureDeploymentDefinition();
static final CredentialDefinition CREDENTIAL_DEFINITION = new CredentialDefinition();
public static StandardResourceDescriptionResolver getResourceDescriptionResolver(final String... keyPrefix) {
StringBuilder prefix = new StringBuilder(SUBSYSTEM_NAME);
for (String kp : keyPrefix) {
prefix.append('.').append(kp);
}
return new StandardResourceDescriptionResolver(prefix.toString(), RESOURCE_NAME, KeycloakExtension.class.getClassLoader(), true, false);
}
/**
* {@inheritDoc}
*/
@Override
public void initializeParsers(final ExtensionParsingContext context) {
context.setSubsystemXmlMapping(SUBSYSTEM_NAME, KeycloakExtension.NAMESPACE, PARSER);
}
/**
* {@inheritDoc}
*/
@Override
public void initialize(final ExtensionContext context) {
KeycloakLogger.ROOT_LOGGER.debug("Activating Keycloak Extension");
final SubsystemRegistration subsystem = context.registerSubsystem(SUBSYSTEM_NAME, MGMT_API_VERSION_MAJOR, MGMT_API_VERSION_MINOR);
ManagementResourceRegistration registration = subsystem.registerSubsystemModel(KEYCLOAK_SUBSYSTEM_RESOURCE);
registration.registerSubModel(REALM_DEFINITION);
ManagementResourceRegistration secureDeploymentRegistration = registration.registerSubModel(SECURE_DEPLOYMENT_DEFINITION);
secureDeploymentRegistration.registerSubModel(CREDENTIAL_DEFINITION);
subsystem.registerXMLElementWriter(PARSER);
}
}
@@ -0,0 +1,60 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AbstractBoottimeAddStepHandler;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.ServiceVerificationHandler;
import org.jboss.as.server.AbstractDeploymentChainStep;
import org.jboss.as.server.DeploymentProcessorTarget;
import org.jboss.as.server.deployment.Phase;
import org.jboss.dmr.ModelNode;
import org.jboss.msc.service.ServiceController;
import java.util.List;
/**
* The Keycloak subsystem add update handler.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
class KeycloakSubsystemAdd extends AbstractBoottimeAddStepHandler {
static final KeycloakSubsystemAdd INSTANCE = new KeycloakSubsystemAdd();
@Override
protected void performBoottime(final OperationContext context, ModelNode operation, final ModelNode model, ServiceVerificationHandler verificationHandler, List<ServiceController<?>> newControllers) {
context.addStep(new AbstractDeploymentChainStep() {
@Override
protected void execute(DeploymentProcessorTarget processorTarget) {
processorTarget.addDeploymentProcessor(Phase.DEPENDENCIES, 0, new KeycloakDependencyProcessorAS7());
processorTarget.addDeploymentProcessor(
Phase.POST_MODULE, // PHASE
Phase.POST_MODULE_VALIDATOR_FACTORY - 1, // PRIORITY
new KeycloakAdapterConfigDeploymentProcessor());
}
}, OperationContext.Stage.RUNTIME);
}
@Override
protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException {
model.setEmptyObject();
}
}
@@ -0,0 +1,47 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.ReloadRequiredRemoveStepHandler;
import org.jboss.as.controller.SimpleResourceDefinition;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.as.controller.operations.common.GenericSubsystemDescribeHandler;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.controller.registry.OperationEntry;
/**
* Definition of subsystem=keycloak.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
public class KeycloakSubsystemDefinition extends SimpleResourceDefinition {
protected KeycloakSubsystemDefinition() {
super(KeycloakExtension.SUBSYSTEM_PATH,
KeycloakExtension.getResourceDescriptionResolver("subsystem"),
KeycloakSubsystemAdd.INSTANCE,
ReloadRequiredRemoveStepHandler.INSTANCE
);
}
@Override
public void registerOperations(ManagementResourceRegistration resourceRegistration) {
super.registerOperations(resourceRegistration);
resourceRegistration.registerOperationHandler(ModelDescriptionConstants.DESCRIBE, GenericSubsystemDescribeHandler.INSTANCE, GenericSubsystemDescribeHandler.INSTANCE, false, OperationEntry.EntryType.PRIVATE);
}
}
@@ -0,0 +1,294 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.as.controller.parsing.ParseUtils;
import org.jboss.as.controller.persistence.SubsystemMarshallingContext;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.Property;
import org.jboss.staxmapper.XMLElementReader;
import org.jboss.staxmapper.XMLElementWriter;
import org.jboss.staxmapper.XMLExtendedStreamReader;
import org.jboss.staxmapper.XMLExtendedStreamWriter;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* The subsystem parser, which uses stax to read and write to and from xml
*/
class KeycloakSubsystemParser implements XMLStreamConstants, XMLElementReader<List<ModelNode>>, XMLElementWriter<SubsystemMarshallingContext> {
/**
* {@inheritDoc}
*/
@Override
public void readElement(final XMLExtendedStreamReader reader, final List<ModelNode> list) throws XMLStreamException {
// Require no attributes
ParseUtils.requireNoAttributes(reader);
ModelNode addKeycloakSub = Util.createAddOperation(PathAddress.pathAddress(KeycloakExtension.PATH_SUBSYSTEM));
list.add(addKeycloakSub);
while (reader.hasNext() && nextTag(reader) != END_ELEMENT) {
if (reader.getLocalName().equals(RealmDefinition.TAG_NAME)) {
readRealm(reader, list);
}
else if (reader.getLocalName().equals(SecureDeploymentDefinition.TAG_NAME)) {
readDeployment(reader, list);
}
}
}
// used for debugging
private int nextTag(XMLExtendedStreamReader reader) throws XMLStreamException {
return reader.nextTag();
}
private void readRealm(XMLExtendedStreamReader reader, List<ModelNode> list) throws XMLStreamException {
String realmName = readNameAttribute(reader);
ModelNode addRealm = new ModelNode();
addRealm.get(ModelDescriptionConstants.OP).set(ModelDescriptionConstants.ADD);
PathAddress addr = PathAddress.pathAddress(PathElement.pathElement(ModelDescriptionConstants.SUBSYSTEM, KeycloakExtension.SUBSYSTEM_NAME),
PathElement.pathElement(RealmDefinition.TAG_NAME, realmName));
addRealm.get(ModelDescriptionConstants.OP_ADDR).set(addr.toModelNode());
while (reader.hasNext() && nextTag(reader) != END_ELEMENT) {
String tagName = reader.getLocalName();
SimpleAttributeDefinition def = RealmDefinition.lookup(tagName);
if (def == null) throw new XMLStreamException("Unknown realm tag " + tagName);
def.parseAndSetParameter(reader.getElementText(), addRealm, reader);
}
if (!SharedAttributeDefinitons.validateTruststoreSetIfRequired(addRealm)) {
//TODO: externalize the message
throw new XMLStreamException("truststore and truststore-password must be set if ssl-required is not none and disable-trust-maanger is false.");
}
list.add(addRealm);
}
private void readDeployment(XMLExtendedStreamReader reader, List<ModelNode> resourcesToAdd) throws XMLStreamException {
String name = readNameAttribute(reader);
ModelNode addSecureDeployment = new ModelNode();
addSecureDeployment.get(ModelDescriptionConstants.OP).set(ModelDescriptionConstants.ADD);
PathAddress addr = PathAddress.pathAddress(PathElement.pathElement(ModelDescriptionConstants.SUBSYSTEM, KeycloakExtension.SUBSYSTEM_NAME),
PathElement.pathElement(SecureDeploymentDefinition.TAG_NAME, name));
addSecureDeployment.get(ModelDescriptionConstants.OP_ADDR).set(addr.toModelNode());
List<ModelNode> credentialsToAdd = new ArrayList<ModelNode>();
while (reader.hasNext() && nextTag(reader) != END_ELEMENT) {
String tagName = reader.getLocalName();
if (tagName.equals(CredentialDefinition.TAG_NAME)) {
readCredential(reader, addr, credentialsToAdd);
continue;
}
SimpleAttributeDefinition def = SecureDeploymentDefinition.lookup(tagName);
if (def == null) throw new XMLStreamException("Unknown secure-deployment tag " + tagName);
def.parseAndSetParameter(reader.getElementText(), addSecureDeployment, reader);
}
/**
* TODO need to check realm-ref first.
if (!SharedAttributeDefinitons.validateTruststoreSetIfRequired(addSecureDeployment)) {
//TODO: externalize the message
throw new XMLStreamException("truststore and truststore-password must be set if ssl-required is not none and disable-trust-maanger is false.");
}
*/
// Must add credentials after the deployment is added.
resourcesToAdd.add(addSecureDeployment);
resourcesToAdd.addAll(credentialsToAdd);
}
public void readCredential(XMLExtendedStreamReader reader, PathAddress parent, List<ModelNode> credentialsToAdd) throws XMLStreamException {
String name = readNameAttribute(reader);
Map<String, String> values = new HashMap<>();
String textValue = null;
while (reader.hasNext()) {
int next = reader.next();
if (next == CHARACTERS) {
// text value of credential element (like for "secret" )
String text = reader.getText();
if (text == null || text.trim().isEmpty()) {
continue;
}
textValue = text;
} else if (next == START_ELEMENT) {
String key = reader.getLocalName();
reader.next();
String value = reader.getText();
reader.next();
values.put(key, value);
} else if (next == END_ELEMENT) {
break;
}
}
if (textValue != null) {
ModelNode addCredential = getCredentialToAdd(parent, name, textValue);
credentialsToAdd.add(addCredential);
} else {
for (Map.Entry<String, String> entry : values.entrySet()) {
ModelNode addCredential = getCredentialToAdd(parent, name + "" + entry.getKey(), entry.getValue());
credentialsToAdd.add(addCredential);
}
}
}
private ModelNode getCredentialToAdd(PathAddress parent, String name, String value) {
ModelNode addCredential = new ModelNode();
addCredential.get(ModelDescriptionConstants.OP).set(ModelDescriptionConstants.ADD);
PathAddress addr = PathAddress.pathAddress(parent, PathElement.pathElement(CredentialDefinition.TAG_NAME, name));
addCredential.get(ModelDescriptionConstants.OP_ADDR).set(addr.toModelNode());
addCredential.get(CredentialDefinition.VALUE.getName()).set(value);
return addCredential;
}
// expects that the current tag will have one single attribute called "name"
private String readNameAttribute(XMLExtendedStreamReader reader) throws XMLStreamException {
String name = null;
for (int i = 0; i < reader.getAttributeCount(); i++) {
String attr = reader.getAttributeLocalName(i);
if (attr.equals("name")) {
name = reader.getAttributeValue(i);
continue;
}
throw ParseUtils.unexpectedAttribute(reader, i);
}
if (name == null) {
throw ParseUtils.missingRequired(reader, Collections.singleton("name"));
}
return name;
}
/**
* {@inheritDoc}
*/
@Override
public void writeContent(final XMLExtendedStreamWriter writer, final SubsystemMarshallingContext context) throws XMLStreamException {
context.startSubsystemElement(KeycloakExtension.NAMESPACE, false);
writeRealms(writer, context);
writeSecureDeployments(writer, context);
writer.writeEndElement();
}
private void writeRealms(XMLExtendedStreamWriter writer, SubsystemMarshallingContext context) throws XMLStreamException {
if (!context.getModelNode().get(RealmDefinition.TAG_NAME).isDefined()) {
return;
}
for (Property realm : context.getModelNode().get(RealmDefinition.TAG_NAME).asPropertyList()) {
writer.writeStartElement(RealmDefinition.TAG_NAME);
writer.writeAttribute("name", realm.getName());
ModelNode realmElements = realm.getValue();
for (AttributeDefinition element : RealmDefinition.ALL_ATTRIBUTES) {
element.marshallAsElement(realmElements, writer);
}
writer.writeEndElement();
}
}
private void writeSecureDeployments(XMLExtendedStreamWriter writer, SubsystemMarshallingContext context) throws XMLStreamException {
if (!context.getModelNode().get(SecureDeploymentDefinition.TAG_NAME).isDefined()) {
return;
}
for (Property deployment : context.getModelNode().get(SecureDeploymentDefinition.TAG_NAME).asPropertyList()) {
writer.writeStartElement(SecureDeploymentDefinition.TAG_NAME);
writer.writeAttribute("name", deployment.getName());
ModelNode deploymentElements = deployment.getValue();
for (AttributeDefinition element : SecureDeploymentDefinition.ALL_ATTRIBUTES) {
element.marshallAsElement(deploymentElements, writer);
}
ModelNode credentials = deploymentElements.get(CredentialDefinition.TAG_NAME);
if (credentials.isDefined()) {
writeCredentials(writer, credentials);
}
writer.writeEndElement();
}
}
private void writeCredentials(XMLExtendedStreamWriter writer, ModelNode credentials) throws XMLStreamException {
Map<String, Object> parsed = new LinkedHashMap<>();
for (Property credential : credentials.asPropertyList()) {
String credName = credential.getName();
String credValue = credential.getValue().get(CredentialDefinition.VALUE.getName()).asString();
if (credName.indexOf('.') > -1) {
String[] parts = credName.split("\\.");
String provider = parts[0];
String propKey = parts[1];
Map<String, String> currentProviderMap = (Map<String, String>) parsed.get(provider);
if (currentProviderMap == null) {
currentProviderMap = new LinkedHashMap<>();
parsed.put(provider, currentProviderMap);
}
currentProviderMap.put(propKey, credValue);
} else {
parsed.put(credName, credValue);
}
}
for (Map.Entry<String, Object> entry : parsed.entrySet()) {
writer.writeStartElement(CredentialDefinition.TAG_NAME);
writer.writeAttribute("name", entry.getKey());
Object value = entry.getValue();
if (value instanceof String) {
writeCharacters(writer, (String) value);
} else {
Map<String, String> credentialProps = (Map<String, String>) value;
for (Map.Entry<String, String> prop : credentialProps.entrySet()) {
writer.writeStartElement(prop.getKey());
writeCharacters(writer, prop.getValue());
writer.writeEndElement();
}
}
writer.writeEndElement();
}
}
// code taken from org.jboss.as.controller.AttributeMarshaller
private void writeCharacters(XMLExtendedStreamWriter writer, String content) throws XMLStreamException {
if (content.indexOf('\n') > -1) {
// Multiline content. Use the overloaded variant that staxmapper will format
writer.writeCharacters(content);
} else {
// Staxmapper will just output the chars without adding newlines if this is used
char[] chars = content.toCharArray();
writer.writeCharacters(chars, 0, chars.length);
}
}
}
@@ -0,0 +1,58 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AbstractAddStepHandler;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.ServiceVerificationHandler;
import org.jboss.dmr.ModelNode;
import org.jboss.msc.service.ServiceController;
import java.util.List;
/**
* Add a new realm.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
public final class RealmAddHandler extends AbstractAddStepHandler {
public static RealmAddHandler INSTANCE = new RealmAddHandler();
private RealmAddHandler() {}
@Override
protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException {
for (AttributeDefinition attrib : RealmDefinition.ALL_ATTRIBUTES) {
attrib.validateAndSet(operation, model);
}
if (!SharedAttributeDefinitons.validateTruststoreSetIfRequired(model.clone())) {
//TODO: externalize message
throw new OperationFailedException("truststore and truststore-password must be set if ssl-required is not none and disable-trust-maanger is false.");
}
}
@Override
protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model, ServiceVerificationHandler verificationHandler, List<ServiceController<?>> newControllers) throws OperationFailedException {
KeycloakAdapterConfigService ckService = KeycloakAdapterConfigService.getInstance();
ckService.addRealm(operation, context.resolveExpressions(model));
}
}
@@ -0,0 +1,89 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.as.controller.SimpleResourceDefinition;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.as.controller.operations.common.GenericSubsystemDescribeHandler;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.controller.registry.OperationEntry;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Defines attributes and operations for the Realm
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
class RealmDefinition extends SimpleResourceDefinition {
public static final String TAG_NAME = "realm";
protected static final List<SimpleAttributeDefinition> REALM_ONLY_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
static {
}
protected static final List<SimpleAttributeDefinition> ALL_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
static {
ALL_ATTRIBUTES.addAll(REALM_ONLY_ATTRIBUTES);
ALL_ATTRIBUTES.addAll(SharedAttributeDefinitons.ATTRIBUTES);
}
private static final Map<String, SimpleAttributeDefinition> DEFINITION_LOOKUP = new HashMap<String, SimpleAttributeDefinition>();
static {
for (SimpleAttributeDefinition def : ALL_ATTRIBUTES) {
DEFINITION_LOOKUP.put(def.getXmlName(), def);
}
}
private static final RealmWriteAttributeHandler realmAttrHandler = new RealmWriteAttributeHandler(ALL_ATTRIBUTES.toArray(new SimpleAttributeDefinition[0]));
public RealmDefinition() {
super(PathElement.pathElement("realm"),
KeycloakExtension.getResourceDescriptionResolver("realm"),
RealmAddHandler.INSTANCE,
RealmRemoveHandler.INSTANCE);
}
@Override
public void registerOperations(ManagementResourceRegistration resourceRegistration) {
super.registerOperations(resourceRegistration);
resourceRegistration.registerOperationHandler(ModelDescriptionConstants.DESCRIBE, GenericSubsystemDescribeHandler.INSTANCE, GenericSubsystemDescribeHandler.INSTANCE, false, OperationEntry.EntryType.PRIVATE);
}
@Override
public void registerAttributes(ManagementResourceRegistration resourceRegistration) {
super.registerAttributes(resourceRegistration);
for (AttributeDefinition attrDef : ALL_ATTRIBUTES) {
//TODO: use subclass of realmAttrHandler that can call RealmDefinition.validateTruststoreSetIfRequired
resourceRegistration.registerReadWriteAttribute(attrDef, null, realmAttrHandler);
}
}
public static SimpleAttributeDefinition lookup(String name) {
return DEFINITION_LOOKUP.get(name);
}
}
@@ -0,0 +1,41 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AbstractRemoveStepHandler;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.dmr.ModelNode;
/**
* Remove a realm.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
final class RealmRemoveHandler extends AbstractRemoveStepHandler {
public static RealmRemoveHandler INSTANCE = new RealmRemoveHandler();
private RealmRemoveHandler() {}
@Override
protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
KeycloakAdapterConfigService ckService = KeycloakAdapterConfigService.getInstance();
ckService.removeRealm(operation);
}
}
@@ -0,0 +1,56 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AbstractWriteAttributeHandler;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.dmr.ModelNode;
import java.util.List;
/**
* Update an attribute on a realm.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
class RealmWriteAttributeHandler extends AbstractWriteAttributeHandler<KeycloakAdapterConfigService> {
public RealmWriteAttributeHandler(AttributeDefinition... definitions) {
super(definitions);
}
@Override
protected boolean applyUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName,
ModelNode resolvedValue, ModelNode currentValue, HandbackHolder<KeycloakAdapterConfigService> hh) throws OperationFailedException {
KeycloakAdapterConfigService ckService = KeycloakAdapterConfigService.getInstance();
ckService.updateRealm(operation, attributeName, resolvedValue);
hh.setHandback(ckService);
return false;
}
@Override
protected void revertUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName,
ModelNode valueToRestore, ModelNode valueToRevert, KeycloakAdapterConfigService ckService) throws OperationFailedException {
ckService.updateRealm(operation, attributeName, valueToRestore);
}
}
@@ -0,0 +1,54 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AbstractAddStepHandler;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.ServiceVerificationHandler;
import org.jboss.dmr.ModelNode;
import org.jboss.msc.service.ServiceController;
import java.util.List;
/**
* Add a deployment to a realm.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
final class SecureDeploymentAddHandler extends AbstractAddStepHandler {
public static SecureDeploymentAddHandler INSTANCE = new SecureDeploymentAddHandler();
private SecureDeploymentAddHandler() {
}
@Override
protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException {
for (AttributeDefinition attr : SecureDeploymentDefinition.ALL_ATTRIBUTES) {
attr.validateAndSet(operation, model);
}
}
@Override
protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model, ServiceVerificationHandler verificationHandler, List<ServiceController<?>> newControllers) throws OperationFailedException {
KeycloakAdapterConfigService ckService = KeycloakAdapterConfigService.getInstance();
ckService.addSecureDeployment(operation, context.resolveExpressions(model));
}
}
@@ -0,0 +1,132 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
import org.jboss.as.controller.SimpleResourceDefinition;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.as.controller.operations.common.GenericSubsystemDescribeHandler;
import org.jboss.as.controller.operations.validation.StringLengthValidator;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.controller.registry.OperationEntry;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Defines attributes and operations for a secure-deployment.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
class SecureDeploymentDefinition extends SimpleResourceDefinition {
public static final String TAG_NAME = "secure-deployment";
protected static final SimpleAttributeDefinition REALM =
new SimpleAttributeDefinitionBuilder("realm", ModelType.STRING, true)
.setXmlName("realm")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final SimpleAttributeDefinition RESOURCE =
new SimpleAttributeDefinitionBuilder("resource", ModelType.STRING, true)
.setXmlName("resource")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final SimpleAttributeDefinition USE_RESOURCE_ROLE_MAPPINGS =
new SimpleAttributeDefinitionBuilder("use-resource-role-mappings", ModelType.BOOLEAN, true)
.setXmlName("use-resource-role-mappings")
.setAllowExpression(true)
.setDefaultValue(new ModelNode(false))
.build();
protected static final SimpleAttributeDefinition BEARER_ONLY =
new SimpleAttributeDefinitionBuilder("bearer-only", ModelType.BOOLEAN, true)
.setXmlName("bearer-only")
.setAllowExpression(true)
.setDefaultValue(new ModelNode(false))
.build();
protected static final SimpleAttributeDefinition ENABLE_BASIC_AUTH =
new SimpleAttributeDefinitionBuilder("enable-basic-auth", ModelType.BOOLEAN, true)
.setXmlName("enable-basic-auth")
.setAllowExpression(true)
.setDefaultValue(new ModelNode(false))
.build();
protected static final SimpleAttributeDefinition PUBLIC_CLIENT =
new SimpleAttributeDefinitionBuilder("public-client", ModelType.BOOLEAN, true)
.setXmlName("public-client")
.setAllowExpression(true)
.setDefaultValue(new ModelNode(false))
.build();
protected static final List<SimpleAttributeDefinition> DEPLOYMENT_ONLY_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
static {
DEPLOYMENT_ONLY_ATTRIBUTES.add(REALM);
DEPLOYMENT_ONLY_ATTRIBUTES.add(RESOURCE);
DEPLOYMENT_ONLY_ATTRIBUTES.add(USE_RESOURCE_ROLE_MAPPINGS);
DEPLOYMENT_ONLY_ATTRIBUTES.add(BEARER_ONLY);
DEPLOYMENT_ONLY_ATTRIBUTES.add(ENABLE_BASIC_AUTH);
DEPLOYMENT_ONLY_ATTRIBUTES.add(PUBLIC_CLIENT);
}
protected static final List<SimpleAttributeDefinition> ALL_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
static {
ALL_ATTRIBUTES.addAll(DEPLOYMENT_ONLY_ATTRIBUTES);
ALL_ATTRIBUTES.addAll(SharedAttributeDefinitons.ATTRIBUTES);
}
private static final Map<String, SimpleAttributeDefinition> DEFINITION_LOOKUP = new HashMap<String, SimpleAttributeDefinition>();
static {
for (SimpleAttributeDefinition def : ALL_ATTRIBUTES) {
DEFINITION_LOOKUP.put(def.getXmlName(), def);
}
}
private static SecureDeploymentWriteAttributeHandler attrHandler = new SecureDeploymentWriteAttributeHandler(ALL_ATTRIBUTES);
public SecureDeploymentDefinition() {
super(PathElement.pathElement(TAG_NAME),
KeycloakExtension.getResourceDescriptionResolver(TAG_NAME),
SecureDeploymentAddHandler.INSTANCE,
SecureDeploymentRemoveHandler.INSTANCE);
}
@Override
public void registerOperations(ManagementResourceRegistration resourceRegistration) {
super.registerOperations(resourceRegistration);
resourceRegistration.registerOperationHandler(ModelDescriptionConstants.DESCRIBE, GenericSubsystemDescribeHandler.INSTANCE, GenericSubsystemDescribeHandler.INSTANCE, false, OperationEntry.EntryType.PRIVATE);
}
@Override
public void registerAttributes(ManagementResourceRegistration resourceRegistration) {
super.registerAttributes(resourceRegistration);
for (AttributeDefinition attrDef : ALL_ATTRIBUTES) {
resourceRegistration.registerReadWriteAttribute(attrDef, null, attrHandler);
}
}
public static SimpleAttributeDefinition lookup(String name) {
return DEFINITION_LOOKUP.get(name);
}
}
@@ -0,0 +1,41 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AbstractRemoveStepHandler;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.dmr.ModelNode;
/**
* Remove a secure-deployment from a realm.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
final class SecureDeploymentRemoveHandler extends AbstractRemoveStepHandler {
public static SecureDeploymentRemoveHandler INSTANCE = new SecureDeploymentRemoveHandler();
private SecureDeploymentRemoveHandler() {}
@Override
protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
KeycloakAdapterConfigService ckService = KeycloakAdapterConfigService.getInstance();
ckService.removeSecureDeployment(operation);
}
}
@@ -0,0 +1,59 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.AbstractWriteAttributeHandler;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.dmr.ModelNode;
import java.util.List;
/**
* Update an attribute on a secure-deployment.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
class SecureDeploymentWriteAttributeHandler extends AbstractWriteAttributeHandler<KeycloakAdapterConfigService> {
public SecureDeploymentWriteAttributeHandler(List<SimpleAttributeDefinition> definitions) {
this(definitions.toArray(new AttributeDefinition[definitions.size()]));
}
public SecureDeploymentWriteAttributeHandler(AttributeDefinition... definitions) {
super(definitions);
}
@Override
protected boolean applyUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName,
ModelNode resolvedValue, ModelNode currentValue, HandbackHolder<KeycloakAdapterConfigService> hh) throws OperationFailedException {
KeycloakAdapterConfigService ckService = KeycloakAdapterConfigService.getInstance();
hh.setHandback(ckService);
ckService.updateSecureDeployment(operation, attributeName, resolvedValue);
return false;
}
@Override
protected void revertUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName,
ModelNode valueToRestore, ModelNode valueToRevert, KeycloakAdapterConfigService ckService) throws OperationFailedException {
ckService.updateSecureDeployment(operation, attributeName, valueToRestore);
}
}
@@ -0,0 +1,227 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
import org.jboss.as.controller.operations.validation.IntRangeValidator;
import org.jboss.as.controller.operations.validation.StringLengthValidator;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;
import java.util.ArrayList;
import java.util.List;
/**
* Defines attributes that can be present in both a realm and an application (secure-deployment).
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
class SharedAttributeDefinitons {
protected static final SimpleAttributeDefinition REALM_PUBLIC_KEY =
new SimpleAttributeDefinitionBuilder("realm-public-key", ModelType.STRING, true)
.setXmlName("realm-public-key")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final SimpleAttributeDefinition AUTH_SERVER_URL =
new SimpleAttributeDefinitionBuilder("auth-server-url", ModelType.STRING, true)
.setXmlName("auth-server-url")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final SimpleAttributeDefinition SSL_REQUIRED =
new SimpleAttributeDefinitionBuilder("ssl-required", ModelType.STRING, true)
.setXmlName("ssl-required")
.setAllowExpression(true)
.setDefaultValue(new ModelNode("external"))
.build();
protected static final SimpleAttributeDefinition ALLOW_ANY_HOSTNAME =
new SimpleAttributeDefinitionBuilder("allow-any-hostname", ModelType.BOOLEAN, true)
.setXmlName("allow-any-hostname")
.setAllowExpression(true)
.setDefaultValue(new ModelNode(false))
.build();
protected static final SimpleAttributeDefinition DISABLE_TRUST_MANAGER =
new SimpleAttributeDefinitionBuilder("disable-trust-manager", ModelType.BOOLEAN, true)
.setXmlName("disable-trust-manager")
.setAllowExpression(true)
.setDefaultValue(new ModelNode(false))
.build();
protected static final SimpleAttributeDefinition TRUSTSTORE =
new SimpleAttributeDefinitionBuilder("truststore", ModelType.STRING, true)
.setXmlName("truststore")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final SimpleAttributeDefinition TRUSTSTORE_PASSWORD =
new SimpleAttributeDefinitionBuilder("truststore-password", ModelType.STRING, true)
.setXmlName("truststore-password")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final SimpleAttributeDefinition CONNECTION_POOL_SIZE =
new SimpleAttributeDefinitionBuilder("connection-pool-size", ModelType.INT, true)
.setXmlName("connection-pool-size")
.setAllowExpression(true)
.setValidator(new IntRangeValidator(0, true))
.build();
protected static final SimpleAttributeDefinition ENABLE_CORS =
new SimpleAttributeDefinitionBuilder("enable-cors", ModelType.BOOLEAN, true)
.setXmlName("enable-cors")
.setAllowExpression(true)
.setDefaultValue(new ModelNode(false))
.build();
protected static final SimpleAttributeDefinition CLIENT_KEYSTORE =
new SimpleAttributeDefinitionBuilder("client-keystore", ModelType.STRING, true)
.setXmlName("client-keystore")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final SimpleAttributeDefinition CLIENT_KEYSTORE_PASSWORD =
new SimpleAttributeDefinitionBuilder("client-keystore-password", ModelType.STRING, true)
.setXmlName("client-keystore-password")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final SimpleAttributeDefinition CLIENT_KEY_PASSWORD =
new SimpleAttributeDefinitionBuilder("client-key-password", ModelType.STRING, true)
.setXmlName("client-key-password")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final SimpleAttributeDefinition CORS_MAX_AGE =
new SimpleAttributeDefinitionBuilder("cors-max-age", ModelType.INT, true)
.setXmlName("cors-max-age")
.setAllowExpression(true)
.setValidator(new IntRangeValidator(-1, true))
.build();
protected static final SimpleAttributeDefinition CORS_ALLOWED_HEADERS =
new SimpleAttributeDefinitionBuilder("cors-allowed-headers", ModelType.STRING, true)
.setXmlName("cors-allowed-headers")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final SimpleAttributeDefinition CORS_ALLOWED_METHODS =
new SimpleAttributeDefinitionBuilder("cors-allowed-methods", ModelType.STRING, true)
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final SimpleAttributeDefinition EXPOSE_TOKEN =
new SimpleAttributeDefinitionBuilder("expose-token", ModelType.BOOLEAN, true)
.setXmlName("expose-token")
.setAllowExpression(true)
.setDefaultValue(new ModelNode(false))
.build();
protected static final SimpleAttributeDefinition AUTH_SERVER_URL_FOR_BACKEND_REQUESTS =
new SimpleAttributeDefinitionBuilder("auth-server-url-for-backend-requests", ModelType.STRING, true)
.setXmlName("auth-server-url-for-backend-requests")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final SimpleAttributeDefinition ALWAYS_REFRESH_TOKEN =
new SimpleAttributeDefinitionBuilder("always-refresh-token", ModelType.BOOLEAN, true)
.setXmlName("always-refresh-token")
.setAllowExpression(true)
.setDefaultValue(new ModelNode(false))
.build();
protected static final SimpleAttributeDefinition REGISTER_NODE_AT_STARTUP =
new SimpleAttributeDefinitionBuilder("register-node-at-startup", ModelType.BOOLEAN, true)
.setXmlName("register-node-at-startup")
.setAllowExpression(true)
.setDefaultValue(new ModelNode(false))
.build();
protected static final SimpleAttributeDefinition REGISTER_NODE_PERIOD =
new SimpleAttributeDefinitionBuilder("register-node-period", ModelType.INT, true)
.setXmlName("register-node-period")
.setAllowExpression(true)
.setValidator(new IntRangeValidator(-1, true))
.build();
protected static final SimpleAttributeDefinition TOKEN_STORE =
new SimpleAttributeDefinitionBuilder("token-store", ModelType.STRING, true)
.setXmlName("token-store")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final SimpleAttributeDefinition PRINCIPAL_ATTRIBUTE =
new SimpleAttributeDefinitionBuilder("principal-attribute", ModelType.STRING, true)
.setXmlName("principal-attribute")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
.build();
protected static final List<SimpleAttributeDefinition> ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
static {
ATTRIBUTES.add(REALM_PUBLIC_KEY);
ATTRIBUTES.add(AUTH_SERVER_URL);
ATTRIBUTES.add(TRUSTSTORE);
ATTRIBUTES.add(TRUSTSTORE_PASSWORD);
ATTRIBUTES.add(SSL_REQUIRED);
ATTRIBUTES.add(ALLOW_ANY_HOSTNAME);
ATTRIBUTES.add(DISABLE_TRUST_MANAGER);
ATTRIBUTES.add(CONNECTION_POOL_SIZE);
ATTRIBUTES.add(ENABLE_CORS);
ATTRIBUTES.add(CLIENT_KEYSTORE);
ATTRIBUTES.add(CLIENT_KEYSTORE_PASSWORD);
ATTRIBUTES.add(CLIENT_KEY_PASSWORD);
ATTRIBUTES.add(CORS_MAX_AGE);
ATTRIBUTES.add(CORS_ALLOWED_HEADERS);
ATTRIBUTES.add(CORS_ALLOWED_METHODS);
ATTRIBUTES.add(EXPOSE_TOKEN);
ATTRIBUTES.add(AUTH_SERVER_URL_FOR_BACKEND_REQUESTS);
ATTRIBUTES.add(ALWAYS_REFRESH_TOKEN);
ATTRIBUTES.add(REGISTER_NODE_AT_STARTUP);
ATTRIBUTES.add(REGISTER_NODE_PERIOD);
ATTRIBUTES.add(TOKEN_STORE);
ATTRIBUTES.add(PRINCIPAL_ATTRIBUTE);
}
/**
* truststore and truststore-password must be set if ssl-required is not none and disable-trust-manager is false.
*
* @param attributes The full set of attributes.
*
* @return <code>true</code> if the attributes are valid, <code>false</code> otherwise.
*/
public static boolean validateTruststoreSetIfRequired(ModelNode attributes) {
if (isSet(attributes, DISABLE_TRUST_MANAGER)) {
return true;
}
if (isSet(attributes, SSL_REQUIRED) && attributes.get(SSL_REQUIRED.getName()).asString().equals("none")) {
return true;
}
//TODO, look into alternatives & requires properties on AttributeDefinition
return isSet(attributes, TRUSTSTORE) && isSet(attributes, TRUSTSTORE_PASSWORD);
}
private static boolean isSet(ModelNode attributes, SimpleAttributeDefinition def) {
ModelNode attribute = attributes.get(def.getName());
if (def.getType() == ModelType.BOOLEAN) {
return attribute.isDefined() && attribute.asBoolean();
}
return attribute.isDefined() && !attribute.asString().isEmpty();
}
}
@@ -0,0 +1,59 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.dmr.ModelNode;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class Util {
public static ModelNode createAddOperation(final PathAddress address) {
return createOperation(ModelDescriptionConstants.ADD, address);
}
public static ModelNode createAddOperation() {
return createEmptyOperation(ModelDescriptionConstants.ADD, null);
}
public static ModelNode createRemoveOperation(final PathAddress address) {
return createOperation(ModelDescriptionConstants.REMOVE, address);
}
public static ModelNode createOperation(final String operationName, final PathAddress address) {
return createEmptyOperation(operationName, address);
}
public static ModelNode createEmptyOperation(String operationName, final PathAddress address) {
ModelNode op = new ModelNode();
op.get(OP).set(operationName);
if (address != null) {
op.get(OP_ADDR).set(address.toModelNode());
} else {
// Just establish the standard structure; caller can fill in address later
op.get(OP_ADDR);
}
return op;
}
}
@@ -0,0 +1,49 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7.logging;
import org.jboss.logging.BasicLogger;
import org.jboss.logging.LogMessage;
import org.jboss.logging.Logger;
import org.jboss.logging.Message;
import org.jboss.logging.MessageLogger;
import static org.jboss.logging.Logger.Level.DEBUG;
import static org.jboss.logging.Logger.Level.INFO;
/**
* This interface to be fleshed out later when error messages are fully externalized.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
@MessageLogger(projectCode = "KEYCLOAK")
public interface KeycloakLogger extends BasicLogger {
/**
* A logger with a category of the package name.
*/
KeycloakLogger ROOT_LOGGER = Logger.getMessageLogger(KeycloakLogger.class, "org.jboss.keycloak");
@LogMessage(level = INFO)
@Message(value = "Keycloak subsystem override for deployment %s")
void deploymentSecured(String deployment);
@LogMessage(level = DEBUG)
@Message(value = "Keycloak has overriden and secured deployment %s")
void warSecured(String deployment);
}
@@ -0,0 +1,34 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7.logging;
import org.jboss.logging.MessageBundle;
import org.jboss.logging.Messages;
/**
* This interface to be fleshed out later when error messages are fully externalized.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2012 Red Hat Inc.
*/
@MessageBundle(projectCode = "TLIP")
public interface KeycloakMessages {
/**
* The messages
*/
KeycloakMessages MESSAGES = Messages.getBundle(KeycloakMessages.class);
}
@@ -0,0 +1,18 @@
#
# Copyright 2016 Red Hat, Inc. and/or its affiliates
# and other contributors as indicated by the @author tags.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
org.keycloak.subsystem.as7.KeycloakExtension
@@ -0,0 +1,89 @@
#
# Copyright 2016 Red Hat, Inc. and/or its affiliates
# and other contributors as indicated by the @author tags.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
keycloak.subsystem=Keycloak adapter subsystem
keycloak.subsystem.add=Operation Adds Keycloak adapter subsystem
keycloak.subsystem.remove=Operation removes Keycloak adapter subsystem
keycloak.subsystem.realm=A Keycloak realm.
keycloak.subsystem.secure-deployment=A deployment secured by Keycloak.
keycloak.realm=A Keycloak realm.
keycloak.realm.add=Add a realm definition to the subsystem.
keycloak.realm.remove=Remove a realm from the subsystem.
keycloak.realm.realm-public-key=Public key of the realm
keycloak.realm.auth-server-url=Base URL of the Realm Auth Server
keycloak.realm.disable-trust-manager=Adapter will not use a trust manager when making adapter HTTPS requests
keycloak.realm.ssl-required=Specify if SSL is required (valid values are all, external and none)
keycloak.realm.allow-any-hostname=SSL Setting
keycloak.realm.truststore=Truststore used for adapter client HTTPS requests
keycloak.realm.truststore-password=Password of the Truststore
keycloak.realm.connection-pool-size=Connection pool size for the client used by the adapter
keycloak.realm.enable-cors=Enable Keycloak CORS support
keycloak.realm.client-keystore=n/a
keycloak.realm.client-keystore-password=n/a
keycloak.realm.client-key-password=n/a
keycloak.realm.cors-max-age=CORS max-age header
keycloak.realm.cors-allowed-headers=CORS allowed headers
keycloak.realm.cors-allowed-methods=CORS allowed methods
keycloak.realm.expose-token=Enable secure URL that exposes access token
keycloak.realm.auth-server-url-for-backend-requests=URL to use to make background calls to auth server
keycloak.realm.always-refresh-token=Refresh token on every single web request
keycloak.realm.register-node-at-startup=Cluster setting
keycloak.realm.register-node-period=how often to re-register node
keycloak.realm.token-store=cookie or session storage for auth session data
keycloak.realm.principal-attribute=token attribute to use to set Principal name
keycloak.secure-deployment=A deployment secured by Keycloak
keycloak.secure-deployment.add=Add a deployment to be secured by Keycloak
keycloak.secure-deployment.realm=Keycloak realm
keycloak.secure-deployment.remove=Remove a deployment to be secured by Keycloak
keycloak.secure-deployment.realm-public-key=Public key of the realm
keycloak.secure-deployment.auth-server-url=Base URL of the Realm Auth Server
keycloak.secure-deployment.disable-trust-manager=Adapter will not use a trust manager when making adapter HTTPS requests
keycloak.secure-deployment.ssl-required=Specify if SSL is required (valid values are all, external and none)
keycloak.secure-deployment.allow-any-hostname=SSL Setting
keycloak.secure-deployment.truststore=Truststore used for adapter client HTTPS requests
keycloak.secure-deployment.truststore-password=Password of the Truststore
keycloak.secure-deployment.connection-pool-size=Connection pool size for the client used by the adapter
keycloak.secure-deployment.resource=Application name
keycloak.secure-deployment.use-resource-role-mappings=Use resource level permissions from token
keycloak.secure-deployment.credentials=Adapter credentials
keycloak.secure-deployment.bearer-only=Bearer Token Auth only
keycloak.secure-deployment.enable-basic-auth=Enable Basic Authentication
keycloak.secure-deployment.public-client=Public client
keycloak.secure-deployment.enable-cors=Enable Keycloak CORS support
keycloak.secure-deployment.client-keystore=n/a
keycloak.secure-deployment.client-keystore-password=n/a
keycloak.secure-deployment.client-key-password=n/a
keycloak.secure-deployment.cors-max-age=CORS max-age header
keycloak.secure-deployment.cors-allowed-headers=CORS allowed headers
keycloak.secure-deployment.cors-allowed-methods=CORS allowed methods
keycloak.secure-deployment.expose-token=Enable secure URL that exposes access token
keycloak.secure-deployment.auth-server-url-for-backend-requests=URL to use to make background calls to auth server
keycloak.secure-deployment.always-refresh-token=Refresh token on every single web request
keycloak.secure-deployment.register-node-at-startup=Cluster setting
keycloak.secure-deployment.register-node-period=how often to re-register node
keycloak.secure-deployment.token-store=cookie or session storage for auth session data
keycloak.secure-deployment.principal-attribute=token attribute to use to set Principal name
keycloak.secure-deployment.turn-off-change-session-id-on-login=The session id is changed by default on a successful login. Change this to true if you want to turn this off
keycloak.secure-deployment.credential=Credential value
keycloak.credential=Credential
keycloak.credential.value=Credential value
keycloak.credential.add=Credential add
keycloak.credential.remove=Credential remove
@@ -1,5 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:jboss:domain:keycloak:1.1"
xmlns="urn:jboss:domain:keycloak:1.1"
@@ -87,6 +104,7 @@
<xs:element name="token-store" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="principal-attribute" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="enable-basic-auth" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
<xs:element name="turn-off-change-session-id-on-login" type="xs:boolean" minOccurs="0" maxOccurs="1" />
</xs:all>
<xs:attribute name="name" type="xs:string" use="required">
<xs:annotation>
@@ -0,0 +1,88 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.subsystem.as7;
import org.jboss.dmr.ModelNode;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
public class RealmDefinitionTestCase {
private ModelNode model;
@Before
public void setUp() {
model = new ModelNode();
model.get("realm").set("demo");
model.get("resource").set("customer-portal");
model.get("realm-public-key").set("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB");
model.get("auth-url").set("http://localhost:8080/auth-server/realms/demo/protocol/openid-connect/login");
model.get("code-url").set("http://localhost:8080/auth-server/realms/demo/protocol/openid-connect/access/codes");
model.get("expose-token").set(true);
ModelNode credential = new ModelNode();
credential.get("password").set("password");
model.get("credentials").set(credential);
}
@Test
public void testIsTruststoreSetIfRequired() throws Exception {
model.get("ssl-required").set("none");
model.get("disable-trust-manager").set(true);
Assert.assertTrue(SharedAttributeDefinitons.validateTruststoreSetIfRequired(model));
model.get("ssl-required").set("none");
model.get("disable-trust-manager").set(false);
Assert.assertTrue(SharedAttributeDefinitons.validateTruststoreSetIfRequired(model));
model.get("ssl-required").set("all");
model.get("disable-trust-manager").set(true);
Assert.assertTrue(SharedAttributeDefinitons.validateTruststoreSetIfRequired(model));
model.get("ssl-required").set("all");
model.get("disable-trust-manager").set(false);
Assert.assertFalse(SharedAttributeDefinitons.validateTruststoreSetIfRequired(model));
model.get("ssl-required").set("external");
model.get("disable-trust-manager").set(false);
Assert.assertFalse(SharedAttributeDefinitons.validateTruststoreSetIfRequired(model));
model.get("ssl-required").set("all");
model.get("disable-trust-manager").set(false);
model.get("truststore").set("foo");
Assert.assertFalse(SharedAttributeDefinitons.validateTruststoreSetIfRequired(model));
model.get("ssl-required").set("all");
model.get("disable-trust-manager").set(false);
model.get("truststore").set("foo");
model.get("truststore-password").set("password");
Assert.assertTrue(SharedAttributeDefinitons.validateTruststoreSetIfRequired(model));
model.get("ssl-required").set("external");
model.get("disable-trust-manager").set(false);
model.get("truststore").set("foo");
model.get("truststore-password").set("password");
Assert.assertTrue(SharedAttributeDefinitons.validateTruststoreSetIfRequired(model));
}
}
+38
View File
@@ -0,0 +1,38 @@
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.9.4.Final</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
<name>Keycloak AS7 / JBoss EAP 6 Integration</name>
<description/>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-as7-integration-pom</artifactId>
<packaging>pom</packaging>
<modules>
<module>as7-adapter-spi</module>
<module>as7-adapter</module>
<module>as7-subsystem</module>
</modules>
</project>
+81
View File
@@ -0,0 +1,81 @@
<?xml version="1.0"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.9.4.Final</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-installed-adapter</artifactId>
<name>Keycloak Installed Application</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-spi</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-core</artifactId>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.installed;
import org.keycloak.OAuth2Constants;
+103
View File
@@ -0,0 +1,103 @@
<?xml version="1.0"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.9.4.Final</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-jaxrs-oauth-client</artifactId>
<name>Keycloak JAX-RS OAuth Client</name>
<description/>
<dependencies>
<dependency>
<groupId>org.jboss.spec.javax.ws.rs</groupId>
<artifactId>jboss-jaxrs-api_2.0_spec</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-spi</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.servlet</groupId>
<artifactId>jboss-servlet-api_3.0_spec</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,31 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.jaxrs;
import javax.annotation.Priority;
import javax.ws.rs.Priorities;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.PreMatching;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
@PreMatching
@Priority(Priorities.AUTHENTICATION)
public interface JaxrsBearerTokenFilter extends ContainerRequestFilter {
}
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.jaxrs;
import org.keycloak.KeycloakPrincipal;
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.jaxrs;
import java.io.InputStream;
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.jaxrs;
import org.keycloak.AbstractOAuthClient;
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.jaxrs;
import java.io.IOException;
+160
View File
@@ -0,0 +1,160 @@
<?xml version="1.0"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.9.4.Final</version>
<relativePath>../../../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-jetty-core</artifactId>
<name>Keycloak Jetty Core Integration</name>
<properties>
<jetty9.version>8.1.17.v20150415</jetty9.version>
<keycloak.osgi.export>
org.keycloak.adapters.jetty.core.*
</keycloak.osgi.export>
<keycloak.osgi.import>
org.eclipse.jetty.*;version="[8.1,10)";resolution:=optional,
javax.servlet.*;version="[2.5,4)";resolution:=optional,
org.keycloak.*;version="${project.version}",
*;resolution:=optional
</keycloak.osgi.import>
</properties>
<description />
<dependencies>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>${jboss.logging.version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-spi</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-jetty-adapter-spi</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty9.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>${jetty9.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-security</artifactId>
<version>${jetty9.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<instructions>
<Bundle-ClassPath>.</Bundle-ClassPath>
<Bundle-Name>${project.name}</Bundle-Name>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Import-Package>${keycloak.osgi.import}</Import-Package>
<Export-Package>${keycloak.osgi.export}</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -1,6 +1,25 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jetty.core;
import org.eclipse.jetty.security.DefaultUserIdentity;
import org.eclipse.jetty.security.IdentityService;
import org.eclipse.jetty.security.LoginService;
import org.eclipse.jetty.security.ServerAuthException;
import org.eclipse.jetty.security.UserAuthentication;
import org.eclipse.jetty.security.authentication.DeferredAuthentication;
@@ -118,10 +137,44 @@ public abstract class AbstractKeycloakJettyAuthenticator extends LoginAuthentica
return new DefaultUserIdentity(theSubject, principal, theRoles);
}
private class DummyLoginService implements LoginService {
@Override
public String getName() {
return null;
}
@Override
public UserIdentity login(String username, Object credentials) {
return null;
}
@Override
public boolean validate(UserIdentity user) {
return false;
}
@Override
public IdentityService getIdentityService() {
return null;
}
@Override
public void setIdentityService(IdentityService service) {
}
@Override
public void logout(UserIdentity user) {
}
}
@Override
public void setConfiguration(AuthConfiguration configuration) {
//super.setConfiguration(configuration);
initializeKeycloak();
// need this so that getUserPrincipal does not throw NPE
_loginService = new DummyLoginService();
String error = configuration.getInitParameter(FormAuthenticator.__FORM_ERROR_PAGE);
setErrorPage(error);
}
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jetty.core;
import org.eclipse.jetty.server.Request;
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jetty.core;
import org.eclipse.jetty.server.Request;
@@ -76,7 +93,7 @@ public class JettyRequestAuthenticator extends RequestAuthenticator {
@Override
protected String getHttpSessionId(boolean create) {
protected String changeHttpSessionId(boolean create) {
HttpSession session = request.getSession(create);
return session != null ? session.getId() : null;
}
@@ -1,3 +1,20 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jetty.core;
import org.eclipse.jetty.server.Request;
@@ -0,0 +1,41 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jetty.core;
import org.keycloak.KeycloakSecurityContext;
import org.keycloak.adapters.OIDCHttpFacade;
import org.keycloak.adapters.jetty.spi.JettyHttpFacade;
import javax.servlet.http.HttpServletResponse;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class OIDCJettyHttpFacade extends JettyHttpFacade implements OIDCHttpFacade {
public OIDCJettyHttpFacade(org.eclipse.jetty.server.Request request, HttpServletResponse response) {
super(request, response);
}
@Override
public KeycloakSecurityContext getSecurityContext() {
return (KeycloakSecurityContext)request.getAttribute(KeycloakSecurityContext.class.getName());
}
}
+159
View File
@@ -0,0 +1,159 @@
<?xml version="1.0"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.9.4.Final</version>
<relativePath>../../../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-jetty81-adapter</artifactId>
<name>Keycloak Jetty 8.1.x Integration</name>
<properties>
<jetty9.version>8.1.17.v20150415</jetty9.version>
<keycloak.osgi.export>
org.keycloak.adapters.jetty.*
</keycloak.osgi.export>
<keycloak.osgi.import>
javax.servlet.*;version="[2.5,4)";resolution:=optional,
org.keycloak.*;version="${project.version}",
*;resolution:=optional
</keycloak.osgi.import>
</properties>
<description />
<dependencies>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>${jboss.logging.version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-core</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-spi</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-jetty-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty9.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>${jetty9.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-security</artifactId>
<version>${jetty9.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<instructions>
<Bundle-ClassPath>.</Bundle-ClassPath>
<Bundle-Name>${project.name}</Bundle-Name>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Import-Package>${keycloak.osgi.import}</Import-Package>
<Export-Package>${keycloak.osgi.export}</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,111 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jetty;
import org.eclipse.jetty.security.authentication.FormAuthenticator;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.util.MultiMap;
import org.keycloak.adapters.spi.AdapterSessionStore;
import org.keycloak.adapters.jetty.spi.JettyHttpFacade;
import org.keycloak.common.util.MultivaluedHashMap;
import javax.servlet.http.HttpSession;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class JettyAdapterSessionStore implements AdapterSessionStore {
public static final String CACHED_FORM_PARAMETERS = "__CACHED_FORM_PARAMETERS";
protected Request myRequest;
public JettyAdapterSessionStore(Request request) {
this.myRequest = request; // for IDE/compilation purposes
}
protected MultiMap<String> extractFormParameters(Request base_request) {
MultiMap<String> formParameters = new MultiMap<String>();
base_request.extractParameters();
return base_request.getParameters();
}
protected void restoreFormParameters(MultiMap<String> j_post, Request base_request) {
base_request.setParameters(j_post);
}
public boolean restoreRequest() {
HttpSession session = myRequest.getSession(false);
if (session == null) return false;
synchronized (session) {
String j_uri = (String) session.getAttribute(FormAuthenticator.__J_URI);
if (j_uri != null) {
// check if the request is for the same url as the original and restore
// params if it was a post
StringBuffer buf = myRequest.getRequestURL();
if (myRequest.getQueryString() != null)
buf.append("?").append(myRequest.getQueryString());
if (j_uri.equals(buf.toString())) {
String method = (String)session.getAttribute(JettyHttpFacade.__J_METHOD);
myRequest.setMethod(method);
MultivaluedHashMap<String, String> j_post = (MultivaluedHashMap<String, String>) session.getAttribute(CACHED_FORM_PARAMETERS);
if (j_post != null) {
myRequest.setContentType("application/x-www-form-urlencoded");
MultiMap<String> map = new MultiMap<String>();
for (String key : j_post.keySet()) {
for (String val : j_post.getList(key)) {
map.add(key, val);
}
}
restoreFormParameters(map, myRequest);
}
session.removeAttribute(FormAuthenticator.__J_URI);
session.removeAttribute(JettyHttpFacade.__J_METHOD);
session.removeAttribute(FormAuthenticator.__J_POST);
}
return true;
}
}
return false;
}
public void saveRequest() {
// remember the current URI
HttpSession session = myRequest.getSession();
synchronized (session) {
// But only if it is not set already, or we save every uri that leads to a login form redirect
if (session.getAttribute(FormAuthenticator.__J_URI) == null) {
StringBuffer buf = myRequest.getRequestURL();
if (myRequest.getQueryString() != null)
buf.append("?").append(myRequest.getQueryString());
session.setAttribute(FormAuthenticator.__J_URI, buf.toString());
session.setAttribute(JettyHttpFacade.__J_METHOD, myRequest.getMethod());
if ("application/x-www-form-urlencoded".equals(myRequest.getContentType()) && "POST".equalsIgnoreCase(myRequest.getMethod())) {
MultiMap<String> formParameters = extractFormParameters(myRequest);
MultivaluedHashMap<String, String> map = new MultivaluedHashMap<String, String>();
for (String key : formParameters.keySet()) {
for (Object value : formParameters.getValues(key)) {
map.add(key, (String) value);
}
}
session.setAttribute(CACHED_FORM_PARAMETERS, map);
}
}
}
}
}
@@ -0,0 +1,63 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jetty;
import org.eclipse.jetty.server.AbstractHttpConnection;
import org.eclipse.jetty.server.Authentication;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.UserIdentity;
import org.keycloak.adapters.AdapterTokenStore;
import org.keycloak.adapters.KeycloakDeployment;
import org.keycloak.adapters.jetty.core.AbstractKeycloakJettyAuthenticator;
import org.keycloak.adapters.jetty.core.JettySessionTokenStore;
import javax.servlet.ServletRequest;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class KeycloakJettyAuthenticator extends AbstractKeycloakJettyAuthenticator {
public KeycloakJettyAuthenticator() {
super();
}
@Override
public AdapterTokenStore createSessionTokenStore(Request request, KeycloakDeployment resolvedDeployment) {
return new JettySessionTokenStore(request, resolvedDeployment, new JettyAdapterSessionStore(request));
}
@Override
protected Request resolveRequest(ServletRequest req) {
return (req instanceof Request)?(Request)req: AbstractHttpConnection.getCurrentConnection().getRequest();
}
@Override
protected Authentication createAuthentication(UserIdentity userIdentity) {
return new KeycloakAuthentication(getAuthMethod(), userIdentity) {
@Override
public void logout() {
logoutCurrent(AbstractHttpConnection.getCurrentConnection().getRequest());
}
};
}
}
+170
View File
@@ -0,0 +1,170 @@
<?xml version="1.0"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.9.4.Final</version>
<relativePath>../../../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-jetty91-adapter</artifactId>
<name>Keycloak Jetty 9.1.x Integration</name>
<properties>
<jetty9.version>9.1.5.v20140505</jetty9.version>
<keycloak.osgi.export>
org.keycloak.adapters.jetty.*
</keycloak.osgi.export>
<keycloak.osgi.import>
org.eclipse.jetty.*;version="[9.1,9.2)";resolution:=optional,
javax.servlet.*;version="[3.0,4)";resolution:=optional,
org.keycloak.*;version="${project.version}",
*;resolution:=optional
</keycloak.osgi.import>
</properties>
<description />
<dependencies>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>${jboss.logging.version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-core</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-jetty-core</artifactId>
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
</exclusion>
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
</exclusion>
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-security</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty9.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>${jetty9.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-security</artifactId>
<version>${jetty9.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<instructions>
<Bundle-ClassPath>.</Bundle-ClassPath>
<Bundle-Name>${project.name}</Bundle-Name>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Import-Package>${keycloak.osgi.import}</Import-Package>
<Export-Package>${keycloak.osgi.export}</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,47 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jetty;
import org.eclipse.jetty.server.Request;
import org.keycloak.adapters.AdapterTokenStore;
import org.keycloak.adapters.KeycloakDeployment;
import org.keycloak.adapters.jetty.core.JettyRequestAuthenticator;
import org.keycloak.adapters.spi.HttpFacade;
import javax.servlet.http.HttpSession;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class Jetty91RequestAuthenticator extends JettyRequestAuthenticator {
public Jetty91RequestAuthenticator(HttpFacade facade, KeycloakDeployment deployment, AdapterTokenStore tokenStore, int sslRedirectPort, Request request) {
super(facade, deployment, tokenStore, sslRedirectPort, request);
}
@Override
protected String changeHttpSessionId(boolean create) {
Request request = this.request;
HttpSession session = request.getSession(false);
if (session == null) {
return request.getSession(true).getId();
}
if (!deployment.isTurnOffChangeSessionIdOnLogin()) return request.changeSessionId();
else return session.getId();
}
}
@@ -0,0 +1,111 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jetty;
import org.eclipse.jetty.http.HttpMethod;
import org.eclipse.jetty.security.authentication.FormAuthenticator;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.util.MultiMap;
import org.keycloak.adapters.spi.AdapterSessionStore;
import org.keycloak.adapters.jetty.spi.JettyHttpFacade;
import org.keycloak.common.util.MultivaluedHashMap;
import javax.servlet.http.HttpSession;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class JettyAdapterSessionStore implements AdapterSessionStore {
public static final String CACHED_FORM_PARAMETERS = "__CACHED_FORM_PARAMETERS";
protected Request myRequest;
public JettyAdapterSessionStore(Request request) {
this.myRequest = request; // for IDE/compilation purposes
}
protected MultiMap<String> extractFormParameters(Request base_request) {
base_request.extractParameters();
return base_request.getParameters();
}
protected void restoreFormParameters(MultiMap<String> j_post, Request base_request) {
base_request.setParameters(j_post);
}
public boolean restoreRequest() {
HttpSession session = myRequest.getSession(false);
if (session == null) return false;
synchronized (session) {
String j_uri = (String) session.getAttribute(FormAuthenticator.__J_URI);
if (j_uri != null) {
// check if the request is for the same url as the original and restore
// params if it was a post
StringBuffer buf = myRequest.getRequestURL();
if (myRequest.getQueryString() != null)
buf.append("?").append(myRequest.getQueryString());
if (j_uri.equals(buf.toString())) {
String method = (String)session.getAttribute(JettyHttpFacade.__J_METHOD);
myRequest.setMethod(HttpMethod.valueOf(method.toUpperCase()), method);
MultivaluedHashMap<String, String> j_post = (MultivaluedHashMap<String, String>) session.getAttribute(CACHED_FORM_PARAMETERS);
if (j_post != null) {
myRequest.setContentType("application/x-www-form-urlencoded");
MultiMap<String> map = new MultiMap<String>();
for (String key : j_post.keySet()) {
for (String val : j_post.getList(key)) {
map.add(key, val);
}
}
restoreFormParameters(map, myRequest);
}
session.removeAttribute(FormAuthenticator.__J_URI);
session.removeAttribute(JettyHttpFacade.__J_METHOD);
session.removeAttribute(FormAuthenticator.__J_POST);
}
return true;
}
}
return false;
}
public void saveRequest() {
// remember the current URI
HttpSession session = myRequest.getSession();
synchronized (session) {
// But only if it is not set already, or we save every uri that leads to a login form redirect
if (session.getAttribute(FormAuthenticator.__J_URI) == null) {
StringBuffer buf = myRequest.getRequestURL();
if (myRequest.getQueryString() != null)
buf.append("?").append(myRequest.getQueryString());
session.setAttribute(FormAuthenticator.__J_URI, buf.toString());
session.setAttribute(JettyHttpFacade.__J_METHOD, myRequest.getMethod());
if ("application/x-www-form-urlencoded".equals(myRequest.getContentType()) && "POST".equalsIgnoreCase(myRequest.getMethod())) {
MultiMap<String> formParameters = extractFormParameters(myRequest);
MultivaluedHashMap<String, String> map = new MultivaluedHashMap<String, String>();
for (String key : formParameters.keySet()) {
for (Object value : formParameters.getValues(key)) {
map.add(key, (String) value);
}
}
session.setAttribute(CACHED_FORM_PARAMETERS, map);
}
}
}
}
}
@@ -0,0 +1,72 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jetty;
import org.eclipse.jetty.server.Authentication;
import org.eclipse.jetty.server.HttpChannel;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.UserIdentity;
import org.keycloak.adapters.AdapterTokenStore;
import org.keycloak.adapters.KeycloakDeployment;
import org.keycloak.adapters.jetty.core.AbstractKeycloakJettyAuthenticator;
import org.keycloak.adapters.jetty.core.JettyRequestAuthenticator;
import org.keycloak.adapters.jetty.core.JettySessionTokenStore;
import org.keycloak.adapters.jetty.spi.JettyHttpFacade;
import javax.servlet.ServletRequest;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class KeycloakJettyAuthenticator extends AbstractKeycloakJettyAuthenticator {
public KeycloakJettyAuthenticator() {
super();
}
@Override
public AdapterTokenStore createSessionTokenStore(Request request, KeycloakDeployment resolvedDeployment) {
return new JettySessionTokenStore(request, resolvedDeployment, new JettyAdapterSessionStore(request));
}
@Override
protected Request resolveRequest(ServletRequest req) {
return (req instanceof Request) ? (Request)req : HttpChannel.getCurrentHttpChannel().getRequest();
}
@Override
protected Authentication createAuthentication(UserIdentity userIdentity) {
return new KeycloakAuthentication(getAuthMethod(), userIdentity) {
@Override
public void logout() {
logoutCurrent(HttpChannel.getCurrentHttpChannel().getRequest());
}
};
}
@Override
protected JettyRequestAuthenticator createRequestAuthenticator(Request request, JettyHttpFacade facade,
KeycloakDeployment deployment, AdapterTokenStore tokenStore) {
return new Jetty91RequestAuthenticator(facade, deployment, tokenStore, -1, request);
}
}
+156
View File
@@ -0,0 +1,156 @@
<?xml version="1.0"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.9.4.Final</version>
<relativePath>../../../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-jetty92-adapter</artifactId>
<name>Keycloak Jetty 9.2.x Integration</name>
<properties>
<jetty9.version>9.2.4.v20141103</jetty9.version>
<keycloak.osgi.export>
org.keycloak.adapters.jetty.*
</keycloak.osgi.export>
<keycloak.osgi.import>
org.eclipse.jetty.*;resolution:=optional,
javax.servlet.*;version="[3.0,4)";resolution:=optional,
org.keycloak.*;version="${project.version}",
*;resolution:=optional
</keycloak.osgi.import>
</properties>
<description />
<dependencies>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>${jboss.logging.version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-core</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-jetty-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty9.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>${jetty9.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-security</artifactId>
<version>${jetty9.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<instructions>
<Bundle-ClassPath>.</Bundle-ClassPath>
<Bundle-Name>${project.name}</Bundle-Name>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Import-Package>${keycloak.osgi.import}</Import-Package>
<Export-Package>${keycloak.osgi.export}</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,47 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jetty;
import org.eclipse.jetty.server.Request;
import org.keycloak.adapters.AdapterTokenStore;
import org.keycloak.adapters.KeycloakDeployment;
import org.keycloak.adapters.jetty.core.JettyRequestAuthenticator;
import org.keycloak.adapters.spi.HttpFacade;
import javax.servlet.http.HttpSession;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class Jetty92RequestAuthenticator extends JettyRequestAuthenticator {
public Jetty92RequestAuthenticator(HttpFacade facade, KeycloakDeployment deployment, AdapterTokenStore tokenStore, int sslRedirectPort, Request request) {
super(facade, deployment, tokenStore, sslRedirectPort, request);
}
@Override
protected String changeHttpSessionId(boolean create) {
Request request = this.request;
HttpSession session = request.getSession(false);
if (session == null) {
return request.getSession(true).getId();
}
if (!deployment.isTurnOffChangeSessionIdOnLogin()) return request.changeSessionId();
else return session.getId();
}
}
@@ -0,0 +1,112 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jetty;
import org.eclipse.jetty.http.HttpMethod;
import org.eclipse.jetty.security.authentication.FormAuthenticator;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.util.MultiMap;
import org.keycloak.adapters.spi.AdapterSessionStore;
import org.keycloak.adapters.jetty.spi.JettyHttpFacade;
import org.keycloak.common.util.MultivaluedHashMap;
import javax.servlet.http.HttpSession;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class JettyAdapterSessionStore implements AdapterSessionStore {
public static final String CACHED_FORM_PARAMETERS = "__CACHED_FORM_PARAMETERS";
protected Request myRequest;
public JettyAdapterSessionStore(Request request) {
this.myRequest = request; // for IDE/compilation purposes
}
protected MultiMap<String> extractFormParameters(Request base_request) {
MultiMap<String> formParameters = new MultiMap<String>();
base_request.extractFormParameters(formParameters);
return formParameters;
}
protected void restoreFormParameters(MultiMap<String> j_post, Request base_request) {
base_request.setContentParameters(j_post);
}
public boolean restoreRequest() {
HttpSession session = myRequest.getSession(false);
if (session == null) return false;
synchronized (session) {
String j_uri = (String) session.getAttribute(FormAuthenticator.__J_URI);
if (j_uri != null) {
// check if the request is for the same url as the original and restore
// params if it was a post
StringBuffer buf = myRequest.getRequestURL();
if (myRequest.getQueryString() != null)
buf.append("?").append(myRequest.getQueryString());
if (j_uri.equals(buf.toString())) {
String method = (String)session.getAttribute(JettyHttpFacade.__J_METHOD);
myRequest.setMethod(HttpMethod.valueOf(method.toUpperCase()), method);
MultivaluedHashMap<String, String> j_post = (MultivaluedHashMap<String, String>) session.getAttribute(CACHED_FORM_PARAMETERS);
if (j_post != null) {
myRequest.setContentType("application/x-www-form-urlencoded");
MultiMap<String> map = new MultiMap<String>();
for (String key : j_post.keySet()) {
for (String val : j_post.getList(key)) {
map.add(key, val);
}
}
restoreFormParameters(map, myRequest);
}
session.removeAttribute(FormAuthenticator.__J_URI);
session.removeAttribute(JettyHttpFacade.__J_METHOD);
session.removeAttribute(FormAuthenticator.__J_POST);
}
return true;
}
}
return false;
}
public void saveRequest() {
// remember the current URI
HttpSession session = myRequest.getSession();
synchronized (session) {
// But only if it is not set already, or we save every uri that leads to a login form redirect
if (session.getAttribute(FormAuthenticator.__J_URI) == null) {
StringBuffer buf = myRequest.getRequestURL();
if (myRequest.getQueryString() != null)
buf.append("?").append(myRequest.getQueryString());
session.setAttribute(FormAuthenticator.__J_URI, buf.toString());
session.setAttribute(JettyHttpFacade.__J_METHOD, myRequest.getMethod());
if ("application/x-www-form-urlencoded".equals(myRequest.getContentType()) && "POST".equalsIgnoreCase(myRequest.getMethod())) {
MultiMap<String> formParameters = extractFormParameters(myRequest);
MultivaluedHashMap<String, String> map = new MultivaluedHashMap<String, String>();
for (String key : formParameters.keySet()) {
for (Object value : formParameters.getValues(key)) {
map.add(key, (String) value);
}
}
session.setAttribute(CACHED_FORM_PARAMETERS, map);
}
}
}
}
}
@@ -0,0 +1,70 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.adapters.jetty;
import org.eclipse.jetty.server.Authentication;
import org.eclipse.jetty.server.HttpChannel;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.UserIdentity;
import org.keycloak.adapters.AdapterTokenStore;
import org.keycloak.adapters.KeycloakDeployment;
import org.keycloak.adapters.jetty.core.AbstractKeycloakJettyAuthenticator;
import org.keycloak.adapters.jetty.core.JettyRequestAuthenticator;
import org.keycloak.adapters.jetty.core.JettySessionTokenStore;
import org.keycloak.adapters.jetty.spi.JettyHttpFacade;
import javax.servlet.ServletRequest;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class KeycloakJettyAuthenticator extends AbstractKeycloakJettyAuthenticator {
public KeycloakJettyAuthenticator() {
super();
}
@Override
protected Request resolveRequest(ServletRequest req) {
return (req instanceof Request) ? (Request)req : HttpChannel.getCurrentHttpChannel().getRequest();
}
@Override
protected Authentication createAuthentication(UserIdentity userIdentity) {
return new KeycloakAuthentication(getAuthMethod(), userIdentity) {
@Override
public void logout() {
logoutCurrent(HttpChannel.getCurrentHttpChannel().getRequest());
}
};
}
@Override
public AdapterTokenStore createSessionTokenStore(Request request, KeycloakDeployment resolvedDeployment) {
return new JettySessionTokenStore(request, resolvedDeployment, new JettyAdapterSessionStore(request));
}
@Override
protected JettyRequestAuthenticator createRequestAuthenticator(Request request, JettyHttpFacade facade,
KeycloakDeployment deployment, AdapterTokenStore tokenStore) {
return new Jetty92RequestAuthenticator(facade, deployment, tokenStore, -1, request);
}
}
Loaded 100 of 6176 files, more files were not shown because too many files have changed in this diff. Show more