Compare commits

...
1038 Commits
Author SHA1 Message Date
keycloak-bot 118d3db203 Set version to 1.9.1.Final 2016-03-09 13:12:26 +00:00
Stian Thorgersen b371521b33 Merge pull request #2350 from mposolda/1.9.x
1.9.x
2016-03-09 06:13:52 +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
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
Stian Thorgersen 75d715d8a7 Merge pull request #2015 from stianst/master
Remove reference to built-in admin account from docs
2016-01-13 09:03:15 +01:00
Stian Thorgersen 62b90ee4e3 Remove reference to built-in admin account from docs 2016-01-13 09:02:52 +01:00
Stian Thorgersen 2f88868e20 Merge pull request #2014 from ssilvert/KEYCLOAK-2294-pi-testrealm
KEYCLOAK-2294 Partial import can fail with 'Removing a detached insta…
2016-01-13 08:37:49 +01:00
Stan Silvert b0de77013c KEYCLOAK-2294 Partial import can fail with 'Removing a detached instance' 2016-01-12 15:46:48 -05:00
Stian Thorgersen 25cd3e3ba8 Merge pull request #2013 from stianst/master
KEYCLOAK-2298
2016-01-12 20:31:37 +01:00
Stian Thorgersen 1b0bf966b6 KEYCLOAK-2298
Demo doesn't have add-user-keycloak.bat
2016-01-12 19:46:34 +01:00
Marek Posolda d8e28ad96b Merge pull request #2012 from mposolda/master
KEYCLOAK-2290 Migration fixes. Bulk update of algorithm field during migration
2016-01-12 18:49:34 +01:00
mposolda 3336d4d7ac KEYCLOAK-2290 bulk update of algorithm field during migration from 1.7 2016-01-12 18:04:50 +01:00
Stian Thorgersen ee3a880a55 Merge pull request #1999 from pedroigor/KEYCLOAK-2266
[KEYCLOAK-2266] - OAuth2 Token Introspection.
2016-01-12 15:37:41 +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
Pedro Igor c9f9ee9799 [KEYCLOAK-2266] - OAuth2 Token Introspection. 2016-01-12 11:16:42 -02: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
Marek Posolda 0536f2c247 Merge pull request #2010 from mposolda/master
KEYCLOAK-2229 Fix NoClassDefFoundError when IdpEmailVerificationAuthe…
2016-01-12 11:31:16 +01:00
mposolda 6f262423f1 KEYCLOAK-2229 Fix NoClassDefFoundError when IdpEmailVerificationAuthenticator is used for link accounts during first broker login 2016-01-12 10:37:44 +01:00
Stian Thorgersen 3c5e7872a7 Merge pull request #2009 from stianst/master
KEYCLOAK-2290
2016-01-12 10:32:22 +01:00
Stian Thorgersen 421dc6043d KEYCLOAK-2290
Migration: empty algorithm field on user credentials of type 'password'
2016-01-12 09:46:35 +01:00
Stian Thorgersen 9402f89d8e Merge pull request #2008 from stianst/master
KEYCLOAK-2229
2016-01-12 09:18:57 +01:00
Stian Thorgersen 81a0135fa6 KEYCLOAK-2229
First broker login throws NoClassDefFoundError: org/keycloak/broker/provider/BrokeredIdentityContext
2016-01-12 09:18:03 +01:00
Bill Burke 43dc250bf2 Merge pull request #2006 from thomasdarimont/issue/KEYCLOAK-2040-Conditional-OTP-Authentication
KEYCLOAK-2040 - Add support for Conditional OTP auth.
2016-01-11 14:56:48 -05:00
Marek Posolda bc3222ab67 Merge pull request #2007 from mposolda/master
Fix DB tests. Cleanup after AddUserTest
2016-01-11 18:56:56 +01:00
mposolda e761d6ce10 Fix DB tests. Cleanup after AddUserTest 2016-01-11 18:00:56 +01:00
Thomas Darimont 46991764d4 KEYCLOAK-2040 - Add support for Conditional OTP auth.
Previously it was not possible to conditionally show a OTP authentication
form. This PR adds support to conditionally require OTP authentication
based on a custom user attribute, a role, a request header pattern
(with black- and whitelisting) as well as a configurable default in
case no condition matches.
2016-01-11 17:39:42 +01:00
Stian Thorgersen 747c0f9869 Merge pull request #2004 from stianst/master
KEYCLOAK-2288
2016-01-11 17:32:38 +01:00
Marek Posolda 5424cd80a8 Merge pull request #2005 from mposolda/master
Fix MySQL - fixing transactions during bootstrap
2016-01-11 17:02:08 +01:00
Stian Thorgersen 8d2becf681 Fix import of com.mongodb.util.MyAsserts.assertFalse 2016-01-11 15:47:09 +01:00
mposolda c3f69fdc54 Fix MySQL - fixing transactions during bootstrap 2016-01-11 15:31:45 +01:00
Stian Thorgersen 45215f361f KEYCLOAK-2288
Upgrade Mongo driver version to 3.2.0
2016-01-11 15:10:00 +01:00
Stian Thorgersen 802488cea0 Merge pull request #2003 from mposolda/master
Fix mongo model
2016-01-11 13:58:06 +01:00
Stian Thorgersen 3ac3d79e30 Merge pull request #2002 from stianst/master
KEYCLOAK-2284
2016-01-11 13:22:44 +01:00
mposolda fe8755d4a4 Fix mongo model 2016-01-11 13:00:56 +01:00
Stian Thorgersen e2b889d727 KEYCLOAK-2284
Setup of background tasks doesn't close KeycloakSession
2016-01-11 11:41:36 +01:00
Stian Thorgersen 2ec4cb82cc Merge pull request #2001 from stianst/master
KEYCLOAK-2278
2016-01-11 11:41:15 +01:00
Stian Thorgersen bc14cade62 KEYCLOAK-2278
NoSuchMethodError org.infinispan.Cache.entrySet() in EAP6 server overlay
2016-01-11 10:07:04 +01:00
Vlasta Ramik 554da73398 Merge remote-tracking branch 'upstream/master' into prod 2016-01-11 09:43:52 +01:00
Stian Thorgersen a6c852603e Merge pull request #2000 from mstruk/truststore
KEYCLOAK-1717 Truststore SPI and file provider
2016-01-11 09:24:53 +01:00
Stian Thorgersen f1602b3b8d Merge pull request #1998 from ssilvert/partial-import
KEYCLOAK-1979: Partial import
2016-01-11 09:22:09 +01:00
Stian Thorgersen 7c8bc5814e Merge pull request #1990 from raehalme/KEYCLOAK-2257
KEYCLOAK-2257: Store user attribute when accepting terms and conditions
2016-01-11 09:03:58 +01:00
Stian Thorgersen 33f83689d5 Merge pull request #1995 from stianst/master
Add test to create user, set password and login using admin endpoints
2016-01-11 09:01:44 +01:00
Marko Strukelj 80e2b8eb39 KEYCLOAK-1717 Truststore SPI and file provider 2016-01-10 12:39:30 +01:00
Stan Silvert fbff61bfba For overwrite, do all deletes, then all adds.
Minor UI enhancements.
Fix 2 JPA bugs.
General cleanup.
Documentation.
2016-01-08 13:45:22 -05:00
Bill Burke ba1a17e668 Merge pull request #1997 from patriot1burke/master
KEYCLOAK-2189
2016-01-08 12:05:50 -05:00
Bill Burke 7bc7510d1b KEYCLOAK-2189 2016-01-08 12:05:43 -05:00
Bill Burke dc337d684a improve client creation when template 2016-01-08 11:40:46 -05:00
Bill Burke 0f9d50924c Merge pull request #1996 from patriot1burke/master
improve client creation when template
2016-01-08 11:40:45 -05:00
Stian Thorgersen cf0eb1184a Add test to create user, set password and login using admin endpoints 2016-01-08 16:37:01 +01:00
Stian Thorgersen ecd31010fe Merge pull request #1994 from stianst/KEYCLOAK-2259
KEYCLOAK-2259
2016-01-08 16:36:12 +01:00
Stian Thorgersen 0985d3c88a Merge pull request #1993 from stianst/master
KEYCLOAK-2276
2016-01-08 16:35:56 +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
Stian Thorgersen ddd99c2411 KEYCLOAK-2259
Redirect URIs and token domains are matched case-sensitively
2016-01-08 15:38:00 +01:00
Stian Thorgersen 7834637749 KEYCLOAK-2276
Login page doesn't render properly when window height is less than 550px
2016-01-08 15:19:59 +01:00
Stian Thorgersen a90d7e54d4 Merge pull request #1992 from stianst/master
KEYCLOAK-2275
2016-01-08 15:19:38 +01:00
mhajas f9f1e36df6 Ignore DemoServletAdapterTest on EAP6 2016-01-08 14:49:48 +01:00
Stian Thorgersen bae2b62200 KEYCLOAK-2275
No Content-Security-Policy meta tag found on Cordova 5.x
2016-01-08 14:34:52 +01:00
Stian Thorgersen 71bcf697cc Merge pull request #1991 from stianst/master
KEYCLOAK-2272
2016-01-08 14:34:31 +01:00
mhajas 27f6390d00 Fix grantServerBasedApp test 2016-01-08 14:09:06 +01:00
Stian Thorgersen 9acb4b86aa Add note that JDK8 is required to build and to run the server 2016-01-08 13:56:07 +01:00
Stian Thorgersen dee0be4237 KEYCLOAK-2272
Update keycloak-datasources.xml and keycloak-infinispan.xml
2016-01-08 13:39:49 +01:00
mhajas 8c4f071003 Merge remote-tracking branch 'upstream/master' into eap64 2016-01-08 13:28:35 +01:00
Thomas Raehalme c4544e8caf Like other timestamps attribute value is now seconds since 1970. 2016-01-08 14:21:43 +02:00
Thomas Raehalme bca3893070 Required action TermsAndConditions now stores user attribute indicating acceptance of terms and conditions. 2016-01-08 13:14:04 +02: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
Bill Burke 280725a2ae Merge pull request #1985 from patriot1burke/master
KEYCLOAK-1990 KEYCLOAK-1991
2016-01-07 18:24:31 -05:00
Bill Burke 2892b093ab Merge remote-tracking branch 'upstream/master' 2016-01-07 17:25:58 -05:00
Bill Burke 78fe064cf0 2213 2016-01-07 17:25:47 -05:00
vramik 448a15b2ca install adapter via cli script from java code after start 2016-01-07 18:58:32 +01:00
Stian Thorgersen 30aaea73e4 Merge pull request #1989 from stianst/master
KEYCLOAK-2127 Re-enable set admin user with welcome page
2016-01-07 16:20:28 +01:00
Stian Thorgersen 4b1b697aa3 KEYCLOAK-2127 Re-enable set admin user with welcome page 2016-01-07 16:19:59 +01:00
Stian Thorgersen 112a44676d Merge pull request #1988 from stianst/KEYCLOAK-2269
KEYCLOAK-2269
2016-01-07 14:08:01 +01:00
Stian Thorgersen f7282d71e5 Merge pull request #1987 from stianst/master
KEYCLOAK-2252
2016-01-07 14:07:49 +01:00
Stian Thorgersen 9840c47970 Merge pull request #1986 from mhajas/master
KEYCLOAK-2127 Use add-user script for admin user creating
2016-01-07 13:17:47 +01:00
Stian Thorgersen 8695e16971 KEYCLOAK-2269
add-user script adds identityFederationEnabled field to keycloak-add-user.json
2016-01-07 13:17:10 +01:00
Stian Thorgersen 65f5ce9f13 KEYCLOAK-2252
Cannot delete client mapper with delete icon
2016-01-07 13:10:01 +01:00
Stian Thorgersen 77962ec896 Merge pull request #1984 from mstruk/providers-init
Prevent ProviderFactories being loaded twice
2016-01-07 11:57:12 +01:00
mhajas 54712e29aa Use user script for admin user creating 2016-01-07 11:24:51 +01:00
Bill Burke 71b6ed80ae Merge remote-tracking branch 'upstream/master' 2016-01-06 16:51:24 -05:00
Bill Burke 4a4bbf26f4 installation provider 2016-01-06 16:51:02 -05:00
Bill Burke 64de96d34b installation provider 2016-01-06 16:49:58 -05:00
Stian Thorgersen 084873f7fb Merge pull request #1981 from stianst/master
KEYCLOAK-2247 Upgrade to WildFly 10.0.0.CR5
2016-01-06 19:19:35 +01:00
Stian Thorgersen c684dac625 Tweak mem for Travis 2016-01-06 16:15:00 +01:00
Stian Thorgersen a5c159eeff KEYCLOAK-2247
Upgrade to WildFly 10.0.0.CR5
2016-01-06 16:15:00 +01:00
Bill Burke 1cbe5c4c80 Merge remote-tracking branch 'upstream/master' 2016-01-06 10:03:27 -05:00
Bill Burke 4a472b8272 KEYCLOAK-1990 KEYCLOAK-1991 2016-01-06 10:02:56 -05:00
Stian Thorgersen ddf74c0d9c Merge pull request #1983 from mstruk/ispn-conf
Fix missing offlineSessions local-cache config for demo-dist
2016-01-06 14:49:04 +01:00
Stian Thorgersen b2a3918fc3 Merge pull request #1982 from abstractj/KEYCLOAK-1919
Make use of display name by default for TOTP
2016-01-06 14:26:05 +01:00
Marko Strukelj aca00dd42c Prevent ProviderFactories being loaded twice 2016-01-05 23:07:13 +01:00
Marko Strukelj 2a8e868bc1 Fix missing offlineSession local-cache config for demo-dist 2016-01-05 22:56:44 +01:00
Stan Silvert 979205c827 Cleanup 2016-01-05 15:33:45 -05:00
Stan Silvert 55e36acfc0 For overwrite, delete then create.
Do all prepares to check for errors, then call doImport on each type.
Combine Realm Role and Client Role processing (RolesPartialImport).
2016-01-05 15:33:45 -05:00
Stan Silvert 4b6825806a Bare bones pagination for partial import results. 2016-01-05 15:33:44 -05:00
Stan Silvert 2d878805c1 Fix resource path for partial import events. 2016-01-05 15:33:43 -05:00
Stan Silvert dd038ddbd5 Add id to partial import results. 2016-01-05 15:33:43 -05:00
Stan Silvert f6a02bd408 Clean commit for partial import with single page for all imports. 2016-01-05 15:33:42 -05:00
Bruno Oliveira 7ec0dad88f Make use of display name by default for TOTP
- use realm name just in case of display name is not available
2016-01-05 18:31:13 -02:00
Marek Posolda 1e3ec1983d Merge pull request #1980 from mposolda/master
LDAP testing: added activation
2016-01-05 20:54:56 +01:00
mposolda 7ec02761ef LDAP testing: added activation 2016-01-05 20:53:25 +01:00
Bill Burke 7b30a6c9c4 Merge pull request #1979 from mposolda/master
Docs for LDAP mappers. Fix testsuite to pass with MSAD
2016-01-05 14:19:50 -05:00
Bill Burke 0d56713871 Merge pull request #1978 from patriot1burke/master
KEYCLOAK-2221
2016-01-05 14:19:33 -05:00
mposolda 658f204d92 Documentation for new LDAP mappers 2016-01-05 18:50:54 +01:00
mposolda 04401af470 Fix testsuite to pass with MSAD 2016-01-05 17:25:42 +01:00
Bill Burke 39d5a07218 KEYCLOAK-2221 2016-01-05 10:59:13 -05:00
Bill Burke a65f619c9a Merge pull request #1977 from mposolda/master
KEYCLOAK-2258 Removing leftovers of file model from docs and testsuite
2016-01-05 10:06:07 -05:00
Bill Burke 01c408ba68 Merge pull request #1975 from thomasdarimont/issue/KEYCLOAK-2256
KEYCLOAK-2256 - Guarantee deterministic ordering for custom user attributes in admin console.
2016-01-05 10:05:36 -05:00
Bill Burke 63975886cb Merge pull request #1974 from patriot1burke/master
set frameork for template config
2016-01-05 10:03:48 -05:00
Bill Burke c3f2ae1cd1 Merge pull request #1973 from thomasdarimont/issue/KEYCLOAK-2253
KEYCLOAK-2253 - Add support for ConfiguredProvider based UserFederationProviderFactory.
2016-01-05 10:03:40 -05:00
mposolda 133e4c59e5 KEYCLOAK-2258 Removing leftovers of file model from docs and testsuite 2016-01-05 15:25:22 +01:00
Marek Posolda d3247bc66a Merge pull request #1976 from mposolda/master
KEYCLOAK-2178 KEYCLOAK-1744 Added MSADUserAccountControlMapper. Remov…
2016-01-05 13:16:32 +01:00
mposolda b6718b44a1 KEYCLOAK-2178 KEYCLOAK-1744 Added MSADUserAccountControlMapper. Removing enableUserAccountControlAfterPasswordUpdate option 2016-01-05 12:11:48 +01:00
Thomas Darimont 15506e3db3 KEYCLOAK-2256 - Guarantee deterministic ordering for custom user attributes in admin console.
We now iterate over custom-user attributes in a deterministic way such that new attributes don't lead
to a complete reordering of the properties in the custom user attributes listings.
Previously the order of custom attributes in the user attributes listings was not deterministic which lead
to cases where keys that shared a common prefix where not placed at arbitrary positions.
Introduced a custom angularjs flter "toOrderedMapSortedByKey" that helps to deterministically iterate
over object properites.
2016-01-05 00:04:40 +01:00
Bill Burke 977f4051b3 Merge remote-tracking branch 'upstream/master' 2016-01-04 17:23:15 -05:00
Bill Burke 49c15f200e Merge pull request #1972 from dbarentine/master
KEYCLOAK-2255 Location header should return IdP alias instead of prov…
2016-01-04 17:18:42 -05:00
Bill Burke 3e5874b2a1 Merge pull request #1971 from abstractj/tooltip-initial-access-token
Tooltips for initial access token fields
2016-01-04 17:15:45 -05:00
Bill Burke f7ac5fae2a Merge pull request #1945 from raehalme/KEYCLOAK-1579
KEYCLOAK-1579: Replaced AdapterDeploymentContextBean with AdapterDeploymentContextFactoryBean
2016-01-04 17:15:25 -05:00
Bill Burke 22ba4847f4 Merge pull request #1965 from jean-merelis/translate
translation of messages to pt_BR
2016-01-04 17:14:55 -05:00
Bill Burke 90822e5b34 Merge pull request #1970 from abstractj/minor-update
Minor change for client registration documentation
2016-01-04 17:14:43 -05:00
Bill Burke 3f62cee836 Merge remote-tracking branch 'upstream/master' 2016-01-04 17:14:19 -05:00
Bill Burke 3bacbdf6ff set framework for template config 2016-01-04 17:13:15 -05:00
Thomas Darimont edcc39d906 KEYCLOAK-2253 - Use string representation for boolean properties in GenericUserFederationCtrl.
Adapted due to code review.
2016-01-04 23:07:08 +01:00
Thomas Darimont 3ec516d14c KEYCLOAK-2253 - Add support for ConfiguredProvider based UserFederationProviderFactory.
UserFederationProvidersResource is now aware of ConfiguredProvider and allows sophisticated
configuration of configuration properties via ProviderConfigProperty definitions.
See DummyUserFederationProviderFactory. getConfigProperties() for example.

Previously  UserFederationProvidersResource did only support simple key-value pairs for expressing
configurable options.

Tested this by launching a standalone KeycloakServer and creating a new Dummy UserFederationProvider.
The default values, labels and help messages are correctly displayed and the values are stored correctly.
2016-01-04 22:23:14 +01:00
Dane Barentine d8d0298498 KEYCLOAK-2255 Location header should return IdP alias instead of provider ID. 2016-01-04 11:30:57 -08:00
Thomas Raehalme 8356409b44 Fixed some typos in the docs and added paragraph regarding GrantedAuthoritiesMapper. 2016-01-04 21:16:37 +02:00
Thomas Raehalme 57971ce0b2 Changed docs to match the new code. 2016-01-04 21:09:36 +02:00
Stian Thorgersen b708cd671e Merge pull request #1969 from vmuzikar/ui-stability
[KEYCLOAK-1865] Enable LdapUserFederationTest#invalidSettingsTest - already fixed
2016-01-04 20:07:52 +01:00
Bruno Oliveira 1b857387f2 Minor change for client registration documentation 2016-01-04 16:31:39 -02:00
Bruno Oliveira cea70337ef Tooltips for initial access token fields 2016-01-04 15:49:57 -02:00
Bill Burke 6d5de7b44e Merge remote-tracking branch 'upstream/master' 2016-01-04 11:26:15 -05:00
Bill Burke 10eba78036 Merge remote-tracking branch 'upstream/master'
Conflicts:
	saml/saml-protocol/src/main/java/org/keycloak/protocol/saml/profile/ecp/SamlEcpProfileProtocolFactory.java
2016-01-04 11:25:14 -05:00
vramik efa112f820 updated version of xml plugin, fix adapter-libs-provided profile in eap6 adapter 2016-01-04 16:46:47 +01:00
Stian Thorgersen dd6b05224d Merge pull request #1968 from stianst/master
KEYCLOAK-2250
2016-01-04 14:33:39 +01:00
Stian Thorgersen e7009cac47 KEYCLOAK-2204 Add test to make sure disabled client can't refresh token 2016-01-04 13:15:58 +01:00
Stian Thorgersen eece3689f2 KEYCLOAK-2228
Deleting of realm when using JPA requires server restart
2016-01-04 13:04:33 +01:00
Vaclav Muzikar f48753f6e1 Enable LdapUserFederationTest#invalidSettingsTest - already fixed 2016-01-04 12:36:38 +01:00
Stian Thorgersen 392ce0b323 KEYCLOAK-2250
Infinispan offline sessions cache is missing from configuration files
2016-01-04 11:53:25 +01:00
Jean Merelis 2fce7f8498 fix doLogIn key (pt_BR) 2016-01-03 21:02:32 -02:00
Jean Merelis c5f19ff2b3 fix some missing translation (pt_BR) 2016-01-02 23:23:04 -02:00
Jean Merelis b24dfa0009 translation of messages to pt_BR 2016-01-02 00:37:47 -02:00
Stian Thorgersen a9b5d07263 Merge pull request #1964 from stianst/master
KEYCLOAK-2242
2015-12-23 14:39:41 +01:00
Stian Thorgersen eddf3eef17 KEYCLOAK-2242
Remove built-in admin account
2015-12-23 13:46:11 +01:00
Bill Burke dbac147419 client config refactor 2015-12-22 17:50:03 -05:00
Marek Posolda 6752a4f9b0 Merge pull request #1963 from mposolda/master
KEYCLOAK-1899 Added HardcodedLDAPRoleMapper
2015-12-22 20:43:09 +01:00
Pedro Igor 35804aa0df Merge pull request #1961 from pedroigor/KEYCLOAK-2202
[KEYCLOAK-2202] - Removing LoginProtocol in order to reuse SAML settings.
2015-12-22 13:48:54 -02:00
mposolda 41d22986d5 KEYCLOAK-1899 Added HardcodedLDAPRoleMapper 2015-12-22 16:22:02 +01:00
Pedro Igor 9172b5472e [KEYCLOAK-2202] - Removing LoginProtocol in order to reuse SAML settings. 2015-12-22 12:53:39 -02:00
Marek Posolda b27b0411a6 Merge pull request #1960 from mposolda/master
KEYCLOAK-2154 Group mapper fixes
2015-12-22 13:19:40 +01:00
mposolda 0c293089c3 KEYCLOAK-2154 Group mapper fixes 2015-12-22 12:32:37 +01:00
Marek Posolda 5403296ac6 Merge pull request #1959 from mposolda/master
KEYCLOAK-2154 Added Group mapper for LDAP. LDAP mappers improvements and fixes
2015-12-22 10:15:26 +01:00
mposolda 20548b402d Separate package for LDAP tests 2015-12-22 09:35:53 +01:00
mposolda 1747e0981f KEYCLOAK-2154 Added Group mapper for LDAP. LDAP mappers improvements and fixes 2015-12-22 08:54:09 +01:00
Bill Burke ea6374163d Merge pull request #1957 from stianst/master
KEYCLOAK-2043
2015-12-21 16:56:01 -05:00
Bill Burke 4782780857 Merge pull request #1958 from patriot1burke/master
refactor client create
2015-12-21 16:55:52 -05:00
Bill Burke b90409c5e4 refactor client create 2015-12-21 16:36:13 -05:00
Stian Thorgersen 9a921f66ff KEYCLOAK-2043
.well-known/openid-configuration doesn't set cache-control header
2015-12-21 15:35:23 +01:00
Stian Thorgersen 4a492ce13c Merge pull request #1956 from stianst/master
KEYCLOAK-2240
2015-12-21 14:29:17 +00:00
Stian Thorgersen 39904548eb KEYCLOAK-2240
Internationalize admin console title
2015-12-21 13:16:54 +01:00
Stian Thorgersen 18268f686c Merge pull request #1955 from stianst/master
Support for branding
2015-12-21 12:00:56 +00: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
Stian Thorgersen 1594e07628 KEYCLOAK-2239
Add link to keycloak.org to Keycloak logo
2015-12-21 12:15:36 +01:00
Stian Thorgersen 606e6fa479 KEYCLOAK-1934
Add display-name and display-name-html to realm
2015-12-21 12:15:13 +01:00
Stian Thorgersen 1afd3d422c Merge pull request #1952 from vmuzikar/ui-stability
KEYCLOAK-1865 Fix stability of some UI arquillian tests
2015-12-21 07:50:11 +00:00
Bill Burke 80fae7116b Merge pull request #1953 from patriot1burke/master
client template scope
2015-12-18 18:32:00 -05:00
Bill Burke 86a0995f29 fix test 2015-12-18 17:31:53 -05:00
Bill Burke a7c684b909 oops 2015-12-18 17:19:31 -05:00
Bill Burke 5caf3e0a2d Merge remote-tracking branch 'upstream/master' 2015-12-18 17:15:40 -05:00
Bill Burke d939b6a431 template scope 2015-12-18 17:15:27 -05:00
Vaclav Muzikar 42d17577d0 Upstream sync 2015-12-18 17:28:57 +01:00
Vaclav Muzikar eaf326dd37 Fix Client Mappers tests
(cherry picked from commit b9f9db0)
2015-12-18 17:18:59 +01:00
Vaclav Muzikar 53a542d1e2 Enable TokensTest (already fixed by previous commit bf70927)
(cherry picked from commit 6783bcb)
2015-12-18 17:15:20 +01:00
Vaclav Muzikar c51d5e9820 Fix PasswordPolicyTest
(cherry picked from commit 87b125e)
2015-12-18 17:15:18 +01:00
Vaclav Muzikar 817127a751 Fix + refactor SecurityDefensesTest
(cherry picked from commit a652173)
2015-12-18 17:15:16 +01:00
Vaclav Muzikar 0e6e3d10d8 Fix LoginSettingsTest
(cherry picked from commit bf70927)
2015-12-18 17:15:09 +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
Bill Burke 0197c69ac3 Merge pull request #1951 from pedroigor/KEYCLOAK-2202
[KEYCLOAK-2202] - Initial support for SAML ECP Profile.
2015-12-17 19:04:17 -05: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
Stian Thorgersen 83eea5036f Merge pull request #1948 from pdrozd/wf10
Arquillian xsl templates - changed namespaces to WF10.
2015-12-17 09:01:14 +00:00
Pedro Igor 1b614a379b [KEYCLOAK-2202] - Initial support for SAML ECP Profile. 2015-12-16 18:46:52 -02:00
Bill Burke 0527d441e3 better logging 2015-12-16 12:23:41 -05:00
Marek Posolda 6569b22c79 Merge pull request #1950 from mposolda/master
Mongo fix
2015-12-16 14:36:27 +01:00
mposolda d0ec1c3b02 Mongo fix 2015-12-16 14:35:59 +01:00
Marek Posolda 2fe7e2a952 Merge pull request #1949 from mposolda/master
LDAP mappers enhancements
2015-12-16 14:33:54 +01:00
mposolda 0d52e4e6c5 Added sync support to UserFederationMapper 2015-12-16 13:52:11 +01:00
mposolda 358c273d39 KEYCLOAK-2227 Added UserRolesRetrieveStrategy. Possibility to read user role mappings through 'memberOf' attribute 2015-12-16 13:52:11 +01:00
mposolda 215d59b1e5 KEYCLOAK-2053 Memberships based on memberUid like attribute 2015-12-16 13:52:11 +01:00
mposolda 2b409b3462 Minor test fix 2015-12-16 13:52:11 +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
Pavel Drozd b4e53b1677 Arquillian xsl templates - changed namespaces to WF10. 2015-12-16 10:26:10 +01:00
Marek Posolda 051f175f68 Merge pull request #1946 from dbarentine/master
KEYCLOAK-2229 Added depending on keycloak-broker-core module to resol…
2015-12-16 07:58:05 +01:00
Bill Burke fd447702e7 Merge pull request #1947 from patriot1burke/master
remove default client mappers when templated
2015-12-15 19:36:37 -05:00
Bill Burke ee79f5e69d remove default client mappers when templated 2015-12-15 17:37:53 -05:00
Dane Barentine de5baa9df7 KEYCLOAK-2229 Added depending on keycloak-broker-core module to resolve NoClassDefFoundError for BrokeredIdentityContext class 2015-12-15 11:15:55 -08:00
vramik e1de2c0661 integration-arquillian: add support for prod testing 2015-12-15 13:14:30 +01:00
Thomas Raehalme 566a58b5d8 Replaced AdapterDeploymentContextBean with AdapterDeploymentContextFactoryBean and added support for KeycloakConfigResolver. 2015-12-15 11:53:10 +02:00
Marek Posolda f837cbfaa9 Merge pull request #1944 from mposolda/master
KEYCLOAK-1906 Customized LDAP filter. LDAP conditions improvements
2015-12-14 14:50:38 +01:00
mposolda 06a55419f1 KEYCLOAK-1906 Customized LDAP filter. LDAP conditions improvements 2015-12-14 13:55:11 +01:00
Marek Posolda 82a573a536 Merge pull request #1939 from mhajas/master
KEYCLOAK-1667 Added adapter tests of SAML to integration arquillian
2015-12-14 09:26:32 +01:00
Stian Thorgersen d46bad56ae Merge pull request #1942 from keycloak/wildfly-10
KEYCLOAK-2223 Upgrade to WildFly 10.0.0.CR4
2015-12-13 21:04:38 +00:00
Marko Strukelj 32af1bd3a5 KEYCLOAK-2223 Upgrade to WildFly 10.0.0.CR4 2015-12-13 21:26:07 +01:00
Bill Burke 38b9d05cd7 Merge pull request #1941 from patriot1burke/master
client templates
2015-12-11 21:02:40 -05:00
Bill Burke e26e31d8b4 client template ui 2015-12-11 17:56:45 -05:00
Bill Burke 2328e0a6f9 Merge remote-tracking branch 'upstream/master' 2015-12-11 10:31:55 -05:00
Bill Burke 96e1813b34 client templates backend 2015-12-11 10:31:42 -05:00
mhajas 97357d020b Merge remote-tracking branch 'upstream/master' 2015-12-11 15:43:03 +01:00
Pavel Drozd b466cec4e5 Merge pull request #1940 from vramik/master
arquillian-testsuite: updated screenshooter version
2015-12-11 15:32:51 +01:00
Pavel Drozd 9228c6a16b Merge pull request #1938 from mhajas/fixDataTable
Fix adapter tests errors caused by changed DataTable fragment
2015-12-11 15:29:28 +01:00
Pavel Drozd 35f8e3c19f Merge pull request #1937 from pdrozd/ssl-required
Support for testing ssl-required.
2015-12-11 15:28:38 +01:00
vramik 9956f425eb arquillian-testsuite: updated screenshooter version 2015-12-11 12:15:27 +01:00
mhajas 5464e600ea Set SAMLServlet test abstract 2015-12-10 17:23:33 +01:00
mhajas cbdba622a5 Merge remote-tracking branch 'upstream/master' 2015-12-10 15:27:55 +01:00
mhajas 49e9965125 Fix timeouts after logout from servlet 2015-12-10 15:26:33 +01:00
mhajas dcaf7ea9d5 Fix test errors caused by changed DataTable fragment 2015-12-10 11:46:40 +01:00
Pavel Drozd 3f51f620b7 Support for testing ssl-required. 2015-12-10 07:21:23 +01:00
Marek Posolda 06e44b185e Merge pull request #1936 from mposolda/master
KEYCLOAK-2124 Post-Broker login flow support
2015-12-09 17:35:00 +01:00
mposolda 17a2bd266b KEYCLOAK-2124 post-broker login flow docs 2015-12-09 17:34:44 +01:00
mposolda 081db0d353 KEYCLOAK-2124 Post-Broker login flow support 2015-12-09 16:36:26 +01:00
mhajas b82346761c Merge remote-tracking branch 'upstream/master' 2015-12-09 10:53:50 +01:00
mhajas 595e7a92e2 Added SAML servlets adapter tests to integration-arquillian 2015-12-09 10:50:25 +01:00
mhajas fee1dea3e6 Added SAML example adapter tests to integration-arqullian 2015-12-09 10:48:53 +01:00
mhajas 9a58e1276a Added integration-arqullian servlet used in SAML tests 2015-12-09 10:45:56 +01:00
mhajas 1d401767d6 Added integration-arqullian SAML example page objects 2015-12-09 10:42:02 +01:00
mhajas 68e3b6c504 Added integration-arqullian SAML servlets page objects 2015-12-09 10:41:17 +01:00
mhajas 813ddf365e Added integration-arqullian keycloak-saml resources 2015-12-09 10:39:34 +01:00
mhajas edf3499662 Added integration-arqullian configuration for SAML adapter tests 2015-12-09 10:36:42 +01:00
Marek Posolda df26caed07 Merge pull request #1933 from vramik/clients
KEYCLOAK-2203, KEYCLOAK-2205
2015-12-09 10:28:56 +01:00
Marek Posolda 9f9067663f Merge pull request #1932 from mhajas/fixDataTable
Fix xpath for rows in DataTable fragment
2015-12-09 10:28:48 +01:00
Marek Posolda 0f3d8b8513 Merge pull request #1935 from thomasdarimont/patch-1
Fixed missing ':' in the JSON example.
2015-12-09 08:52:32 +01:00
mhajas 4ca3bf530f Merge remote-tracking branch 'upstream/master' into fixDataTable 2015-12-09 07:41:45 +01:00
Thomas Darimont c8c0a45ce4 Fixed missing ':' in the JSON example. 2015-12-08 18:45:25 +01:00
Stian Thorgersen 7313b843b9 Merge pull request #1934 from stianst/KEYCLOAK-1900-PASS-HASH
KEYCLOAK-1900 Password Hash SPI
2015-12-08 16:17:32 +01:00
Stian Thorgersen 321cac2ab8 KEYCLOAK-1900 Refactoring 2015-12-08 14:06:40 +01:00
tsudot 162dd4051d KEYCLOAK-1900 Add password hash SPI and provider
- Default encoder set to Pbkdf2PasswordEncoder
2015-12-08 13:25:59 +01:00
vramik cd19c1acdf fix tests witch fails with phantomjs 2015-12-08 08:40:40 +01:00
vramik 44ed912154 Merge branch 'master' of https://github.com/keycloak/keycloak into clients
Conflicts:
	testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientForm.java
	testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/fragment/FlashMessage.java
	testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/fragment/OnOffSwitch.java
	testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/WaitUtils.java
	testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractAuthTest.java
	testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/console/clients/ClientRolesTest.java
2015-12-07 15:45:02 +01:00
vramik 39856c32d1 Merge branch 'master' of https://github.com/keycloak/keycloak into clients
Conflicts:
	testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientForm.java
	testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/fragment/FlashMessage.java
	testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/fragment/OnOffSwitch.java
	testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/WaitUtils.java
	testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractAuthTest.java
	testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/console/clients/ClientRolesTest.java
2015-12-07 15:44:34 +01:00
vramik d3a893b171 KEYCLOAK-2203 - Add new cluster node form doesn't validate host input 2015-12-07 15:28:39 +01:00
vramik ba861f227e added UI tests for client's tabs: clustering, installation 2015-12-07 15:09:24 +01:00
Tomas Kyjovsky 4a57bcc0b4 Merge pull request #1903 from tkyjovsk/master
Increased pageload timeout. Increased other timeouts for travis. Better handling of closeable alert messages.
2015-12-07 11:09:37 +01:00
Tomas Kyjovsky 87a8e017fa Disabled crudRole test, unstable. Role tests need rewrite. 2015-12-07 09:10:32 +01:00
Tomas Kyjovsky b8fe608aaf Merge upstream-master 2015-12-07 05:59:51 +01:00
mhajas d3e6b38a8e Fix xpath for DataTable row and tests 2015-12-04 14:26:24 +01:00
Marek Posolda 8589327cdd Merge pull request #1931 from mposolda/master
KEYCLOAK-2197 Fix broker tests to work with sybase. Added LoggingRule
2015-12-04 12:24:33 +01:00
vramik 1b936a1230 added UI tests for client scope 2015-12-04 12:04:39 +01:00
mposolda 45c490b640 KEYCLOAK-2197 Fix broker tests to work with sybase. Added LoggingRule 2015-12-04 11:44:30 +01:00
vramik 1dd3fc537b added UI tests for client mappers saml 2015-12-03 14:47:13 +01:00
Stian Thorgersen 73cf2404ff Merge pull request #1928 from stianst/master
KEYCLOAK-2176 Add default roles and actions to users created with add…
2015-12-03 13:30:29 +01:00
vramik c16b6e6a43 update ClientSettingsTest due to KEYCLOAK-1129 2015-12-03 12:49:29 +01:00
Stian Thorgersen 8d23422605 KEYCLOAK-2176 Add default roles and actions to users created with add-user script 2015-12-03 11:45:56 +01:00
Stian Thorgersen 9cd8d1612e Merge pull request #1926 from ssilvert/mappers-tooltip
Fix typo for mappers.tooltip
2015-12-03 11:44:39 +01:00
Stian Thorgersen 277faea1d0 Merge pull request #1924 from ppalaga/151202-rename-w9-subsystem-dir
Rename keycloak-wf9-subsystem directory to keycloak-wildfly-subsystem to match t
2015-12-03 10:53:36 +01:00
Stian Thorgersen 58c7b6090b Merge pull request #1919 from stianst/master
Cache fixes
2015-12-03 10:53:18 +01:00
Stian Thorgersen f45bb62fcc KEYCLOAK-2192
Class serialization issues when Realm and User caches are in ASYNC mode
2015-12-03 08:24:30 +01:00
Stian Thorgersen 34c3ffaae1 Ported AdminApiTest to use admin client 2015-12-03 08:24:23 +01:00
Stian Thorgersen a218cc3034 KEYCLOAK-2179 Cache fixes 2015-12-03 08:24:16 +01:00
Stan Silvert c62b3822f4 Fix typo for mappers.tooltip 2015-12-02 11:54:02 -05:00
Tomas Kyjovsky b0e9720f88 Increased arquillian timeouts. 2015-12-02 16:46:15 +01:00
Tomas Kyjovsky 6507f58b49 Merge upstream-master 2015-12-02 16:11:45 +01:00
Tomas Kyjovsky 46e2440d30 Refactoring of arquillian waiting methods. 2015-12-02 15:58:23 +01:00
vramik 9b51b6e43b Merge upstream/master into clients 2015-12-02 15:18:15 +01:00
Peter Palaga 4772b8401a KEYCLOAK-2099 fixup: Rename keycloak-wf9-subsystem directory to
keycloak-wildfly-subsystem to match the WF module it contains
2015-12-02 14:51:48 +01:00
vramik 2b25c120d4 added UI tests for client mappers oidc 2015-12-02 13:12:05 +01:00
Marek Posolda c19e65f93c Merge pull request #1922 from mposolda/master
Minor fixes in kerberos example
2015-12-02 12:15:18 +01:00
mposolda 87994e032d Minor fixes in kerberos example 2015-12-02 11:31:12 +01:00
Stian Thorgersen ee6753d31b KEYCLOAK-1813 KEYCLOAK-2182 Fixes enable/disable cache 2015-12-02 11:24:04 +01:00
Stian Thorgersen 09c18306c2 KEYCLOAK-2179
Realm and user cache is invalidated when added to other nodes
2015-12-02 11:23:54 +01:00
Marek Posolda 6124fd64f3 Merge pull request #1918 from mposolda/master
Fix typos
2015-12-02 10:25:15 +01:00
mposolda 2a03d23098 Fix typos 2015-12-02 08:51:20 +01:00
Stian Thorgersen ff806eae08 Version bump 2015-12-01 19:54:28 +01:00
Tomas Kyjovsky e44d6f9888 Merge upstream-master 2015-12-01 17:30:02 +01:00
Tomas Kyjovsky 4e79dde17f Removed travis profile from arq. testsuite. 2015-12-01 17:29:28 +01:00
Tomas Kyjovsky 29e05ecf0d Fixed arquillian wait intervals config. 2015-12-01 17:28:28 +01:00
vramik c4f3bd3dda Merge upstream/master 2015-12-01 12:51:57 +01:00
Tomas Kyjovsky ed30c4454a Increased arquillian timeouts for travis. 2015-11-30 17:09:57 +01:00
Tomas Kyjovsky 0d4771a763 Merge upstream-master 2015-11-30 16:48:25 +01:00
Tomas Kyjovsky a8317e0cc2 1) Pageload timeout set to 60s. Other timeouts set by arq props in arquillian.xml 2) Refactoring: FlashMessage --> AdminConsoleAlert and AccountManagementAlert 2015-11-30 16:43:18 +01:00
vramik 6a7a823fb4 merge upstream/master 2015-11-30 14:59:44 +01:00
vramik 2e39221b98 added UI tests for clients 2015-11-25 09:27:23 +01:00
5749 changed files with 189746 additions and 94507 deletions

No files matched your search

+9 -2
View File
@@ -1,13 +1,20 @@
language: java
env:
global:
- MAVEN_SKIP_RC=true
- MAVEN_OPTS="-Xms512m -Xmx2048m"
jdk:
- oraclejdk8
before_script:
- export MAVEN_SKIP_RC=true
install:
- travis_wait mvn install -Pdistribution -DskipTests=true -B -V -q
- mvn install -Pdistribution -DskipTests=true -B -V -q
script:
- mvn test -B
- mvn -file testsuite/integration-arquillian test -B -Pno-console
sudo: false
+16 -14
View File
@@ -1,13 +1,15 @@
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
--------
Ensure you have JDK 7 (or newer), Maven 3.2.1 (or newer) and Git installed
Ensure you have JDK 8 (or newer), Maven 3.2.1 (or newer) and Git installed
java -version
mvn -version
@@ -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.1.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;
@@ -433,6 +450,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);
}
@@ -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;
@@ -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() {
@@ -361,4 +380,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;
+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.1.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.1.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.1.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.1.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.1.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.1.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.1.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.1.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.1.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.1.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 5749 files, more files were not shown because too many files have changed in this diff. Show more