Compare commits

..
725 Commits
Author SHA1 Message Date
Stian Thorgersen 3b071b83aa Version bump 2015-01-22 19:04:46 +01:00
Stian Thorgersen eef6e94923 KEYCLOAK-977 Use reflection to find constructor for JBossGenericPrincipal to support EAP 6.4
Conflicts:
	integration/as7-eap6/adapter/src/main/java/org/keycloak/adapters/as7/CatalinaSecurityContextHelper.java
2015-01-22 16:24:07 +01:00
Stian Thorgersen f6d50245ac KEYCLOAK-820 Don't expose realm private key through admin endpoints
Conflicts:
	model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java
2015-01-22 16:15:21 +01:00
Stian Thorgersen f3940bf78c Fix broken symbol 2015-01-22 16:09:01 +01:00
Stian Thorgersen 62bcf17a1e Merge pull request #825 from matzew/ReducingLogLevel
setting 'Bearer role' loglevel to debug
2014-10-31 12:33:36 +01:00
Matthias Wessendorf 44f9b28618 setting 'Bearer role' loglevel to debug 2014-10-31 11:44:25 +01:00
Stian Thorgersen 9ec0409a46 Merge pull request #814 from stianst/Branch_1_0
Version bump
2014-10-29 14:32:49 +01:00
Stian Thorgersen cd5e191b18 Version bump 2014-10-29 14:32:23 +01:00
Stian Thorgersen a14b3753da Merge pull request #813 from stianst/Branch_1_0
Branch 1 0
2014-10-29 14:22:15 +01:00
Stian Thorgersen 41b8701d51 KEYCLOAK-763
Document reverse proxy setup on AS7/EAP
2014-10-29 14:04:43 +01:00
Stian Thorgersen d84e7eb38b KEYCLOAK-797
login-status-iframe.html fails if domain contains hyphen
2014-10-29 14:03:48 +01:00
Stian Thorgersen d40b256557 Version bump 2014-10-29 14:03:40 +01:00
Stian Thorgersen 5304e197e5 KEYCLOAK-747 2014-10-27 15:02:36 +01:00
Stian Thorgersen 623e28b9c2 Fixes to testsuite for db cleanup 2014-10-27 13:46:03 +01:00
Stian Thorgersen 274bc4e33a Added liquibase to clean db for testsuite only 2014-10-27 08:33:24 +01:00
Stian Thorgersen 42b44ed3b0 Version bump 2014-10-27 08:33:18 +01:00
Stian Thorgersen b0c99e6111 KEYCLOAK-786
Value in input fields should be escaped
2014-10-27 08:33:13 +01:00
Stian Thorgersen fe73feee34 Merge pull request #788 from stianst/Branch_1_0
KEYCLOAK-711 HttpServletReqest.logout() does not work with relative URI
2014-10-21 12:43:03 +02:00
Stian Thorgersen 629d3ce4aa KEYCLOAK-711 HttpServletReqest.logout() does not work with relative URI 2014-10-21 12:36:46 +02:00
Stian Thorgersen ed6c290bbc Merge pull request #785 from stianst/Branch_1_0
KEYCLOAK-710 Ignore missing roles in access-code
2014-10-21 11:24:50 +02:00
Stian Thorgersen 9dde3f60d6 KEYCLOAK-710 Ignore missing roles in access-code 2014-10-21 11:09:43 +02:00
Stian Thorgersen 1bcc8c9110 Merge pull request #781 from stianst/Branch_1_0
Fixes
2014-10-21 10:02:12 +02:00
Stian Thorgersen bb132e1aa0 KEYCLOAK-765 Check signature on state in social callback 2014-10-20 13:29:45 +02:00
Stian Thorgersen 5e4b843eb7 KEYCLOAK-700 Check path is valid in account/login-redirect 2014-10-20 13:12:23 +02:00
Stian Thorgersen 85cc63c7ce KEYCLOAK-703 Check valid origin is passed to login-status-iframe
Conflicts:
	services/src/main/java/org/keycloak/services/resources/TokenService.java
2014-10-20 13:12:08 +02:00
Stian Thorgersen a697f4bd41 KEYCLOAK-699 Set maximum size of qr-code 2014-10-20 13:03:05 +02:00
Stian Thorgersen 7e03c74bc3 KEYCLOAK-747 Fix onUserRemoved in user session providers
Conflicts:
	model/sessions-infinispan/src/main/java/org/keycloak/models/sessions/infinispan/InfinispanUserSessionProvider.java
	model/sessions-infinispan/src/main/java/org/keycloak/models/sessions/infinispan/InfinispanUserSessionProviderFactory.java
	model/sessions-infinispan/src/main/java/org/keycloak/models/sessions/infinispan/UsernameLoginFailureAdapter.java
	model/sessions-infinispan/src/main/java/org/keycloak/models/sessions/infinispan/entities/LoginFailureEntity.java
	testsuite/integration/src/test/java/org/keycloak/testsuite/model/UserSessionProviderTest.java
2014-10-17 13:34:12 +02:00
Stian Thorgersen 67f7bcec99 Version bump 2014-10-08 15:36:53 +02:00
Stian Thorgersen 267b80c2fa Fix adding attributes to users over rest 2014-10-08 12:11:28 +02:00
Stian Thorgersen 66e848710e Merge pull request #748 from stianst/Branch_1_0
Version bump
2014-10-08 11:11:37 +02:00
Stian Thorgersen 93f48ecb6c Version bump 2014-10-08 09:30:30 +02:00
Stian Thorgersen ecace349f5 Merge pull request #740 from stianst/Branch_1_0
KEYCLOAK-729
2014-10-03 14:12:10 +02:00
Stian Thorgersen 4a5b313816 KEYCLOAK-729
Update themes documentation
2014-10-03 14:11:27 +02:00
Stian Thorgersen c79506a34f Merge pull request #738 from stianst/Branch_1_0
Fixes
2014-10-03 13:24:45 +02:00
Stian Thorgersen 5e97051c07 KEYCLOAK-722 Refreshing token throws RuntimeException if realm keys have changed
Conflicts:
	testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/RefreshTokenTest.java

Backport changes to AssertEvents
2014-10-03 13:23:07 +02:00
Stian Thorgersen 562aa24ebf KEYCLOAK-662 NPE when using direct grant API with email as username 2014-10-03 13:23:07 +02:00
Stian Thorgersen 4a66687304 Merge pull request #735 from stianst/Branch_1_0
KEYCLOAK-701 Use built-in themes if specified theme is not found
2014-10-03 11:27:48 +02:00
Stian Thorgersen 42c2066fd8 KEYCLOAK-701 Use built-in themes if specified theme is not found 2014-10-03 11:16:50 +02:00
Stian Thorgersen 161b3293dc Merge pull request #732 from stianst/Branch_1_0
KEYCLOAK-732 AuthenticationManager.logout should logout just current use...
2014-10-03 11:02:29 +02:00
mposolda a9608904d0 KEYCLOAK-732 AuthenticationManager.logout should logout just current userSession
Backport multi-session tests to 1.0.x
2014-10-03 11:01:47 +02:00
mposolda 1b9358c4c6 KEYCLOAK-709 ResourceAdminManager.logoutApplication shouldn't immediatelly fail with RuntimeException 2014-10-02 13:34:00 +02:00
Stian Thorgersen 70ff6c7209 Merge pull request #726 from lfryc/KEYCLOAK-727-log-out-all-sessions
KEYCLOAK-727: 'logout'->'log out' + moved message to bundle
2014-10-02 10:54:02 +02:00
Lukas Fryc 3133e30265 KEYCLOAK-727: 'logout'->'log out' + moved message to bundle 2014-10-02 09:54:45 +02:00
Stian Thorgersen d0c2e80949 KEYCLOAK-725 Add realm update to the Admin Client 2014-10-01 14:53:08 +02:00
Stian Thorgersen 89e1937501 Update version 2014-10-01 14:50:35 +02:00
Stian Thorgersen c05f83c9b3 Merge pull request #709 from stianst/master
Add test to add/remove attributes to user through admin endpoints
2014-09-25 19:36:43 +02:00
Stian Thorgersen f2e97ff9d6 Add test to add/remove attributes to user through admin endpoints 2014-09-25 19:35:57 +02:00
Stian Thorgersen ca4ed6d528 Merge pull request #708 from stianst/master
Fix cordova example
2014-09-25 19:00:45 +02:00
Stian Thorgersen 8006ea073b Fix cordova example 2014-09-25 19:00:13 +02:00
Stian Thorgersen f8b4a91fa8 Merge pull request #707 from sebastienblanc/all_origins
change origin to * so it will work even if KC is behind https (like on OpenShift)
2014-09-25 18:49:36 +02:00
Sebastien Blanc e17d6c81f9 change origin to * 2014-09-25 17:43:10 +02:00
Stian Thorgersen f77de41b2e Merge pull request #706 from stianst/master
Fix welcome-theme for testsuite
2014-09-25 11:54:21 +02:00
Stian Thorgersen c12577e886 Fix welcome-theme for testsuite 2014-09-25 11:53:28 +02:00
Stian Thorgersen 5daec20a6e Merge pull request #705 from cvasilak/doc-link
fix docbook link
2014-09-24 12:05:11 +01:00
Christos Vasilakis 6d3aaa0560 fix docbook link 2014-09-24 12:58:18 +03:00
Stian Thorgersen 2e11e71453 Merge pull request #704 from cvasilak/link.fix
fix create-realm link
2014-09-24 10:03:21 +01:00
Christos Vasilakis fb561b8fd6 fix create-realm link 2014-09-24 11:40:22 +03:00
Bill Burke a26ac1758c Merge pull request #703 from patriot1burke/master
KEYCLOAK-705 and 687
2014-09-19 11:37:25 -04:00
Bill Burke ef60e17641 security vulnerability doc 2014-09-19 11:35:15 -04:00
Bill Burke 53943f8246 KEYCLOAK-705 2014-09-19 11:03:08 -04:00
Bill Burke 0b8b31a3ea KEYCLOAK-705 2014-09-19 10:00:47 -04:00
Stian Thorgersen 6f3132eafd Merge pull request #701 from stianst/master
KEYCLOAK-696 Display Keycloak version in admin console
2014-09-18 13:24:38 +02:00
Stian Thorgersen dcb5717154 KEYCLOAK-696 Display Keycloak version in admin console 2014-09-18 13:24:03 +02:00
Stian Thorgersen bfdb8d4e2d Merge pull request #700 from stianst/master
Removed info log statement
2014-09-18 12:38:48 +02:00
Stian Thorgersen 91fced3b87 Removed info log statement 2014-09-18 12:37:51 +02:00
Marek Posolda 825c475c7f Merge pull request #699 from mposolda/master
Admin console fixes, KEYCLOAK_REMEMBER_ME life changed to 1 year
2014-09-18 11:15:09 +02:00
mposolda 89471b7db1 KEYCLOAK-695 Let KEYCLOAK_REMEMBER_ME cookie to be valid for 1 year 2014-09-18 11:03:44 +02:00
mposolda 95233af485 KEYCLOAK-694 Fix JS error which could happen when creating application 2014-09-18 10:51:10 +02:00
mposolda fc37398235 KEYCLOAK-693 Hide top navigation when creating OAuth client 2014-09-18 10:50:18 +02:00
Marek Posolda 16ea18370d Merge pull request #698 from mposolda/master
Prefill login form just if rememberMe enabled for the realm
2014-09-17 08:59:00 +02:00
mposolda 1049bca433 Prefill login form just if rememberMe enabled for the realm 2014-09-17 08:54:29 +02:00
Marek Posolda 364174fb7e Merge pull request #697 from mposolda/master
Cookie & rememberMe fix. Fixing testsuite with mongo
2014-09-16 22:15:27 +02:00
mposolda 5352872b4b Use KEYCLOAK_REMEMBER_ME as hint to prefill login form. Change lifespan of KEYCLOAK_IDENTITY to maxSsoSessionLifespan 2014-09-16 22:09:27 +02:00
mposolda bd0887d18e Fixing testsuite for mongo 2014-09-16 20:02:30 +02:00
Marek Posolda 9a5f42039d Merge pull request #696 from mposolda/master
Added directive kcNavigationApplication and kcNavigationOauthClient. Hide Scope and Claims for bearer-only apps
2014-09-12 20:16:52 +02:00
mposolda ce8dd136bd Added directive kcNavigationApplication and kcNavigationOauthClient. Hide Scope and Claims for bearer-only apps 2014-09-12 20:15:11 +02:00
mposolda 1be2bff95f Typo 2014-09-12 16:57:02 +02:00
Stian Thorgersen 485ca9c90f Merge pull request #695 from stianst/master
KEYCLOAK-657 Set cache-control for keycloak.js and login-iframe
2014-09-12 13:47:20 +02:00
Stian Thorgersen 811cfd52c9 KEYCLOAK-657 Set cache-control for keycloak.js and login-iframe 2014-09-12 13:46:56 +02:00
Stian Thorgersen 5c1807eb2d Merge pull request #694 from stianst/master
Fixes to KEYCLOAK-682
2014-09-12 12:27:31 +02:00
Stian Thorgersen 7c15a70f53 Fixes to KEYCLOAK-682 2014-09-12 12:26:52 +02:00
Stian Thorgersen c9c525e942 Merge pull request #693 from stianst/master
KEYCLOAK-682 Only send logout admin action to clients associated with us...
2014-09-12 11:47:30 +02:00
Stian Thorgersen 5d141d4d8a KEYCLOAK-682 Only send logout admin action to clients associated with user session 2014-09-12 11:47:11 +02:00
Stian Thorgersen e96d6f0dfd Merge pull request #692 from stianst/master
Change version schema to match JBoss
2014-09-12 09:36:27 +02:00
Stian Thorgersen 423dc1b8a7 Change version schema to match JBoss 2014-09-12 09:35:08 +02:00
Marek Posolda ab080dcdd8 Merge pull request #691 from mposolda/master
Preserve form values in account mgmt after error. Allow valid email during registration or account mgmt
2014-09-11 20:57:27 +02:00
mposolda 6f173d4554 KEYCLOAK-678 Preserve form values in account mgmt after error 2014-09-11 20:54:48 +02:00
mposolda 649a40f58c KEYCLOAK-676 Validate email address format during registration or account mgmt 2014-09-11 20:05:00 +02:00
Stian Thorgersen d06668d39b Merge pull request #690 from stianst/master
KEYCLOAK-653 Add theme support to welcome-pages
2014-09-11 15:58:51 +02:00
Stian Thorgersen b23463a1d2 KEYCLOAK-653 Add theme support to welcome-pages 2014-09-11 15:58:29 +02:00
Stian Thorgersen 7f81032577 Merge pull request #689 from stianst/master
KEYCLOAK-680 Add/remove social-links through admin api
2014-09-11 12:10:23 +02:00
Stian Thorgersen 280cbf2174 KEYCLOAK-680 Add/remove social-links through admin api 2014-09-11 12:09:55 +02:00
Stian Thorgersen 228bb297c2 Merge pull request #688 from stianst/master
Added KEYCLOAK_DEV_PORT env variable for KeycloakServer
2014-09-11 11:05:53 +02:00
Stian Thorgersen f96e59d085 Added KEYCLOAK_DEV_PORT env variable for KeycloakServer 2014-09-11 11:05:29 +02:00
Stian Thorgersen 86300e7e86 Merge pull request #687 from stianst/master
Version bump
2014-09-11 09:29:37 +02:00
Stian Thorgersen 5dea07793b Version bump 2014-09-11 09:27:58 +02:00
Marek Posolda 5e51204114 Merge pull request #686 from mposolda/master
KEYCLOAK-674 Reduce info level logging in adapters
2014-09-10 16:04:48 +02:00
mposolda 4c0751c1a0 KEYCLOAK-674 Reduce info level logging in adapters 2014-09-10 16:02:22 +02:00
Marek Posolda ec1434c65e Merge pull request #685 from mposolda/master
Support for cors in PublicRealmResource
2014-09-10 13:16:21 +02:00
mposolda aa7bbeb11b Support for cors in PublicRealmResource 2014-09-10 13:05:53 +02:00
Marek Posolda 88a39dbaf7 Merge pull request #683 from mposolda/master
KEYCLOAK-670 allow ServerInfo to be available with cors
2014-09-10 10:52:33 +02:00
mposolda 52920119bd Ensure that ServerInfo request is authorized and add CORS support to it 2014-09-10 10:42:05 +02:00
mposolda 47ac358bb6 Fix timeouts in cors example 2014-09-10 10:42:04 +02:00
Stian Thorgersen 62aa2d7f65 Merge pull request #684 from stianst/master
Fix CRSF protection on Chrome, and add check if 'Referer' header
2014-09-10 10:34:49 +02:00
Stian Thorgersen 557de7690e Fix CRSF protection on Chrome, and add check if 'Referer' header 2014-09-10 10:32:56 +02:00
Bill Burke 4c8da3d614 Merge pull request #682 from patriot1burke/master
version bump
2014-09-09 13:35:39 -04:00
Bill Burke 3f539c6d5c version bump 2014-09-09 13:34:56 -04:00
Bill Burke 5b1d67f17d Merge pull request #681 from patriot1burke/master
change CSRF to random value
2014-09-09 13:27:59 -04:00
Bill Burke e3e32982a0 change CSRF to random value 2014-09-09 13:27:34 -04:00
Bill Burke b771cd30e7 Merge pull request #680 from patriot1burke/master
nolog CORS exception
2014-09-09 12:54:55 -04:00
Bill Burke ac29db51e5 nolog CORS exception 2014-09-09 12:51:55 -04:00
Bill Burke 6e3770f04a Merge pull request #679 from patriot1burke/master
CSRF
2014-09-09 12:07:29 -04:00
Bill Burke d0a3a04d34 CSRF 2014-09-09 12:06:48 -04:00
Stian Thorgersen c5662020d8 Merge pull request #678 from stianst/master
Moved logo-example themes to examples/themes
2014-09-09 14:09:58 +02:00
Stian Thorgersen fea0d1af66 Moved logo-example themes to examples/themes 2014-09-09 14:09:32 +02:00
Stian Thorgersen 30cd28d288 Merge pull request #677 from stianst/master
KEYCLOAK-668 Make sure keycloak.js doesn't send multiple concurrent requ...
2014-09-09 13:46:21 +02:00
Stian Thorgersen c475721dab KEYCLOAK-668 Make sure keycloak.js doesn't send multiple concurrent requests to refresh the token 2014-09-09 13:45:55 +02:00
Stian Thorgersen 839069ca15 Merge pull request #676 from stianst/master
Fixes to admin console random logout
2014-09-09 11:02:19 +02:00
Stian Thorgersen 09860f1ee1 Fix test 2014-09-09 11:01:24 +02:00
Stian Thorgersen a1b6378bef KEYCLOAK-667 Remove client-side idle timeout from admin console - with sso idle timeout we have a server-side mechanism for this 2014-09-09 11:01:24 +02:00
Stian Thorgersen 3530fa6259 KEYCLOAK-666 Update session last refreshed on every token refresh 2014-09-09 11:01:24 +02:00
Bill Burke d22afd78e6 Merge pull request #675 from patriot1burke/master
doc update
2014-09-08 09:09:07 -04:00
Bill Burke f1986093e6 doc update 2014-09-08 09:07:51 -04:00
Stian Thorgersen 6c5477bc02 Merge pull request #674 from stianst/master
Minor fixes to theme docs
2014-09-08 14:59:34 +02:00
Stian Thorgersen ae6fd458e8 Minor fixes to theme docs 2014-09-08 14:59:09 +02:00
Stian Thorgersen cdda48d895 Merge pull request #673 from stianst/master
Typo fix in docs
2014-09-08 10:25:18 +02:00
Stian Thorgersen 556314ae15 Typo fix in docs 2014-09-08 10:24:47 +02:00
Stian Thorgersen a2845fa0b4 Merge pull request #672 from stianst/master
Added instruction to manually configure and deploy the unconfigured demo
2014-09-03 13:32:33 +02:00
Stian Thorgersen 8c4a3374d3 Added instruction to manually configure and deploy the unconfigured demo 2014-09-03 13:20:58 +02:00
Stian Thorgersen b97106b750 Adding changes to examples overview readme 2014-09-03 13:18:14 +02:00
Stian Thorgersen 7907abd206 Merge pull request #671 from stianst/master
Added README.md with Overview of all examples
2014-09-03 11:22:42 +02:00
Stian Thorgersen 090871f8b9 Added README.md with Overview of all examples 2014-09-03 11:22:08 +02:00
Stian Thorgersen 0baf12c0ef Merge pull request #670 from stianst/master
Updates to server-installation docs
2014-09-03 10:13:36 +02:00
Stian Thorgersen 1599371ee5 Updates to server-installation docs 2014-09-03 10:13:05 +02:00
Stian Thorgersen 3bc27ef366 Merge pull request #669 from stianst/master
Fix AccountTest.viewLog test
2014-09-03 08:53:56 +02:00
Stian Thorgersen d5c5cc8321 Fix AccountTest.viewLog test 2014-09-03 08:53:02 +02:00
Bill Burke aea00fc574 Merge pull request #668 from patriot1burke/master
admin theme refactor
2014-09-02 11:37:32 -04:00
Bill Burke e9dc8b2460 refactor admin theme 2014-09-02 11:36:59 -04:00
Bill Burke eaed199b20 add logo example theme 2014-09-02 11:11:26 -04:00
Marek Posolda f7fcefc11c Merge pull request #667 from mposolda/master
KEYCLOAK-659 Export current version number during export
2014-09-02 17:09:10 +02:00
mposolda 1f0dcbddbe KEYCLOAK-659 Export current version number during export 2014-09-02 17:06:58 +02:00
Stian Thorgersen 9af0743883 Merge pull request #666 from stianst/master
Updated docs to inherit project version from keycloak-parent
2014-09-02 14:07:24 +02:00
Stian Thorgersen 7d4863783c Use keycloak-parent in docbook to inherit project version 2014-09-02 13:57:23 +02:00
Stian Thorgersen d87718f768 Inject project version from pom 2014-09-02 13:22:15 +02:00
Stian Thorgersen c7ba6159b5 Merge pull request #665 from stianst/master
Doc fix
2014-09-02 12:52:42 +02:00
Stian Thorgersen b43909aff1 Doc fix 2014-09-02 12:52:22 +02:00
Marek Posolda 87d9a5422d Merge pull request #664 from mposolda/master
Use stronger passwords in LDAP tests due to password policy on MSAD2012
2014-09-02 12:49:34 +02:00
mposolda 44937d33ad Use stronger passwords in LDAP tests due to password policy on MSAD2012 2014-09-02 12:43:14 +02:00
Stian Thorgersen b561080f3a Merge pull request #663 from stianst/master
Fix search for users by attribute on mongo
2014-09-02 11:52:15 +02:00
Stian Thorgersen d905ce12e3 Fix search for users by attribute on mongo 2014-09-02 11:51:29 +02:00
Marek Posolda 7040bd1c51 Merge pull request #662 from mposolda/master
Fix SyncProvidersTest with ActiveDirectory
2014-09-02 11:12:43 +02:00
mposolda cd91a29a89 Fix SyncProvidersTest with ActiveDirectory 2014-09-02 11:06:31 +02:00
Stian Thorgersen b1b452815a Merge pull request #661 from stianst/master
KEYCLOAK-656 Remove login-status-iframe from dist
2014-09-02 10:54:52 +02:00
Stian Thorgersen 59d66dd20e KEYCLOAK-656 Remove login-status-iframe from dist 2014-09-02 10:54:26 +02:00
Stian Thorgersen 0763d0d9d6 Merge pull request #660 from stianst/master
KEYCLOAK-658 Fix searching for users
2014-09-02 10:02:08 +02:00
Stian Thorgersen 8c8c44e50f KEYCLOAK-658 Fix searching for users 2014-09-02 10:01:44 +02:00
Marek Posolda 14b1941454 Merge pull request #659 from mposolda/master
Added more props to LDAPEmbeddedServer to allow automated test with Acti...
2014-09-01 20:54:49 +02:00
mposolda e52811ac28 Added more props to LDAPEmbeddedServer to allow automated test with ActiveDirectory 2014-09-01 20:43:14 +02:00
Stian Thorgersen 4f3a980f8b Merge pull request #658 from stianst/master
Version bump
2014-09-01 10:17:31 +02:00
Stian Thorgersen 05a1fc1ded Version bump 2014-09-01 10:17:00 +02:00
Stian Thorgersen ff74d1ddc0 Merge pull request #657 from stianst/master
Various fixes
2014-08-29 17:11:53 +02:00
Stian Thorgersen 31b0f5543f Fixes 2014-08-29 17:11:18 +02:00
Stian Thorgersen 39c0be5d99 KEYCLOAK-652
Social user can't set password
2014-08-29 16:51:10 +02:00
Stian Thorgersen fb18789b05 KEYCLOAK-650
Server error while trying to download keycloak.json for oauth client
2014-08-29 16:08:42 +02:00
Stian Thorgersen bcbf5da4b8 KEYCLOAK-651
Page not found trying to save changes to brute force
2014-08-29 16:04:37 +02:00
Stian Thorgersen e1b9dfe65d KEYCLOAK-649 Invalidate realm if app name or client clientId is changed 2014-08-29 15:49:17 +02:00
Stian Thorgersen 52f86f2293 Merge pull request #656 from stianst/master
Fixes to event-store-mem example
2014-08-29 14:56:09 +02:00
Stian Thorgersen e413694cf5 Fixes to event-store-mem example 2014-08-29 14:55:45 +02:00
Stian Thorgersen 20ce36dc64 Merge pull request #655 from stianst/master
Clean user credential management form
2014-08-29 11:06:11 +02:00
Stian Thorgersen a3c982a630 Clean user credential management form 2014-08-29 11:05:37 +02:00
Stian Thorgersen e0542b5260 Merge pull request #654 from stianst/master
KEYCLOAK-648 Fix removing role from composite role
2014-08-29 10:27:29 +02:00
Stian Thorgersen 7c7025a83d KEYCLOAK-648 Fix removing role from composite role 2014-08-29 10:18:00 +02:00
Stian Thorgersen 3e6a1f47ec Merge pull request #653 from stianst/master
Fix test
2014-08-29 09:10:41 +02:00
Stian Thorgersen 32703d19a0 Fix test 2014-08-29 08:59:57 +02:00
Stian Thorgersen cdc6588ac1 Merge branch 'ungarida-master' 2014-08-28 14:30:29 +02:00
Stian Thorgersen 57aea9b51c Merge branch 'master' of https://github.com/ungarida/keycloak into ungarida-master
Conflicts:
	integration/tomcat7/adapter/src/main/java/org/keycloak/adapters/tomcat7/AuthenticatedActionsValve.java
2014-08-28 14:29:07 +02:00
Stian Thorgersen a2171bf777 Merge pull request #652 from stianst/master
Password token
2014-08-28 14:22:51 +02:00
Stian Thorgersen b9d0f64f74 Added password token to use inplace of plain-text password for totp 2014-08-28 13:51:55 +02:00
Stian Thorgersen 55d614fce8 Reduce log in UserFederationResource 2014-08-28 11:26:55 +02:00
Stian Thorgersen 46d118207a Merge pull request #651 from stianst/master
Rename audit to events
2014-08-28 11:07:02 +02:00
Stian Thorgersen 3bfe3d256e Rename audit to events 2014-08-28 10:56:37 +02:00
Marek Posolda b50ab14a0a Merge pull request #650 from mposolda/master
More Federation & LDAP fixes
2014-08-27 12:41:38 +02:00
mposolda 08c58cf2f2 Upgrade picketlink to 2.7.0.Beta1 2014-08-27 12:22:15 +02:00
mposolda d26543360b KEYCLOAK-646 Fix LDAP authentication when there are commas in the value of bindingProperty 2014-08-27 12:19:23 +02:00
mposolda fb18004c1d KEYCLOAK-643 Handle flows with adding user with existing username or email in federation providers 2014-08-27 12:19:23 +02:00
Stian Thorgersen 49fb452a79 Merge pull request #649 from stianst/master
KEYCLOAK-531 Reduce info level logging
2014-08-27 11:17:56 +02:00
Stian Thorgersen 55bd889a0f KEYCLOAK-531 Reduce info level logging 2014-08-27 11:17:24 +02:00
Stian Thorgersen 269a0dbec1 Merge pull request #643 from ssilvert/KEYCLOAK-642-subsys-wfcontroller
KEYCLOAK-642 Latest WildFly breaks Keycloak Subsystem
2014-08-27 08:19:20 +02:00
Marek Posolda cf51db88e7 Merge pull request #648 from mposolda/master
Federation & LDAP related fixes
2014-08-26 20:43:23 +02:00
mposolda fc0889cd2e KEYCLOAK-644 Searching by email from LDAP doesn't work 2014-08-26 20:24:25 +02:00
mposolda b3b480c25f Display proper error message if LDAP-linked user couldn't be deleted due to read-only mode 2014-08-26 19:10:48 +02:00
mposolda 892fa04130 KEYCLOAK-645 Disable username field when editing user in admin console 2014-08-26 18:04:26 +02:00
Marek Posolda 8d3e51c236 Merge pull request #647 from mposolda/master
Handle exceptions and UI errors when user is read only. Minor sync issue
2014-08-26 13:02:11 +02:00
mposolda fd9d2ba4d5 Handle exceptions and UI errors when user is read only. Some sync issues 2014-08-26 12:54:05 +02:00
Marek Posolda 75bc633a33 Merge pull request #645 from mposolda/master
Fix pagination of searching users
2014-08-25 21:14:56 +02:00
mposolda 3fdb22cb05 Fix pagination of searching users 2014-08-25 21:13:50 +02:00
Marek Posolda f51ba1cb8a Merge pull request #644 from mposolda/master
Docs about sync. Tooltips and minor fixes
2014-08-25 17:19:02 +02:00
mposolda 688f4a07a3 Added docs about sync of users 2014-08-25 17:17:32 +02:00
mposolda 6c7d0f27a7 More tooltips for LDAP and generic federation. Minor fixes 2014-08-25 16:28:52 +02:00
Stan Silvert 1e5ca3062c KEYCLOAK-642 Latest WildFly breaks Keycloak Subsystem 2014-08-22 13:49:57 -04:00
Bill Burke ca97e7ba35 Merge pull request #642 from patriot1burke/master
import console from export
2014-08-21 17:25:16 -04:00
Bill Burke e99afec7ec import console from export 2014-08-21 17:17:09 -04:00
Bill Burke a23853a6bc Merge pull request #641 from patriot1burke/master
bump pom
2014-08-21 10:47:22 -04:00
Bill Burke 7c8edb5d11 bump pom 2014-08-21 10:46:49 -04:00
Bill Burke 83ad045410 Merge pull request #640 from patriot1burke/master
last fixes for rc1
2014-08-20 14:51:14 -04:00
Bill Burke e5d5276135 race 2014-08-20 14:50:28 -04:00
Bill Burke 6f38a02aaa SSL mode docs 2014-08-20 14:37:15 -04:00
Bill Burke 5dd84f1d9a fix AccountService referrer problems 2014-08-20 14:20:59 -04:00
Bill Burke 30147ce25a import doc 2014-08-20 13:32:14 -04:00
Bill Burke dd011f043d fix cors demo 2014-08-20 13:29:09 -04:00
Bill Burke 7dec0319b6 doc ix 2014-08-20 13:26:57 -04:00
Bill Burke 06c14df0f3 Merge pull request #639 from patriot1burke/master
enhancements
2014-08-20 11:56:29 -04:00
Bill Burke 041d0be990 add notification messages 2014-08-20 11:55:59 -04:00
Bill Burke f6a76e673c add federation breadcrums 2014-08-20 11:40:48 -04:00
Bill Burke 47f361a4ab nocache for fed provider list 2014-08-20 11:29:45 -04:00
Bill Burke 6e7924da76 demo fixes 2014-08-20 11:08:40 -04:00
Bill Burke df1a0c03b6 Merge pull request #638 from patriot1burke/master
readme
2014-08-20 08:51:03 -04:00
Bill Burke 971bea8a24 readme again 2014-08-20 08:50:24 -04:00
Bill Burke c8f0a1ab5a readme 2014-08-20 08:49:42 -04:00
Bill Burke 0ae9ac0848 Merge pull request #637 from patriot1burke/master
doc touchup
2014-08-19 15:10:52 -04:00
Bill Burke 3dd52e8b28 doc touchup 2014-08-19 15:10:32 -04:00
Bill Burke 0f6915c615 Merge pull request #636 from patriot1burke/master
fix mongo
2014-08-19 14:49:35 -04:00
Bill Burke 74cd23b331 fix mongo 2014-08-19 14:49:15 -04:00
Bill Burke cc17895ef3 Merge pull request #635 from patriot1burke/master
more minor screen changes
2014-08-19 12:13:24 -04:00
Bill Burke 09ada81b27 more minor screen changes 2014-08-19 12:12:58 -04:00
Bill Burke 75e0fa87c3 Merge pull request #632 from ssilvert/master
Add web-console and http-endpoint default configurations for WildFly
2014-08-18 18:56:02 -04:00
Bill Burke 6628e226e4 Merge pull request #631 from ssilvert/Use-KeycloakDS
By default, the datasource should be KeycloakDS instead of ExampleDS.
2014-08-18 18:55:53 -04:00
Bill Burke 89d47a392b Merge pull request #634 from patriot1burke/master
buncho fixes
2014-08-18 18:55:18 -04:00
Bill Burke c38abb2cfe ? 2014-08-18 18:52:51 -04:00
Bill Burke faf18dfdfd fix cookie parsing problem 2014-08-18 18:36:36 -04:00
Bill Burke 2dc32fb8c9 fix menu error 2014-08-18 18:06:23 -04:00
Bill Burke 2ec029e8e0 Merge pull request #633 from patriot1burke/master
social fixes
2014-08-18 11:56:14 -04:00
Bill Burke 80904209b3 KEYCLOAK-627 2014-08-18 11:55:27 -04:00
Bill Burke 8b1483d7ef docs 2014-08-18 10:48:28 -04:00
Bill Burke bbeff1ef22 Merge remote-tracking branch 'upstream/master' 2014-08-18 10:40:55 -04:00
Stan Silvert aac3c2e0ee Don't block server artifact from being pushed to the repo. 2014-08-15 14:51:38 -04:00
Stan Silvert a240a00983 Add web-console and http-endpoint default configurations for WildFly
build.
2014-08-15 13:43:18 -04:00
Bill Burke c86a6ba3f3 fix admin reset email 2014-08-15 11:46:38 -04:00
Stan Silvert bc301baa1f By default, the datasource should be KeycloakDS instead of ExampleDS. 2014-08-15 08:55:04 -04:00
Bill Burke edbf26f007 Merge pull request #630 from patriot1burke/master
expanded token service coverage
2014-08-14 21:01:26 -04:00
Bill Burke 5dca2a3588 expanded token service coverage 2014-08-14 21:01:05 -04:00
Bill Burke cf5a7d228b Merge pull request #629 from patriot1burke/master
add some breadcrumbs, add app role
2014-08-14 18:47:15 -04:00
Bill Burke f7a7c3ca7b add some breadcrumbs, add app role 2014-08-14 18:46:53 -04:00
Bill Burke 28fcdf0b8f Merge pull request #628 from patriot1burke/master
relative uri problem
2014-08-14 12:00:03 -04:00
Bill Burke c38ec33881 tooltip fixes 2014-08-14 11:59:03 -04:00
Bill Burke cfee00d4c5 fix relative uri problem 2014-08-14 11:01:04 -04:00
Bill Burke 46bf0d78fa Merge pull request #627 from patriot1burke/master
more tooltips
2014-08-13 15:11:28 -04:00
Bill Burke a14be592de more tooltips 2014-08-13 15:11:05 -04:00
Bill Burke 29691a3167 Merge pull request #626 from patriot1burke/master
more tooltips, change password
2014-08-13 12:17:48 -04:00
Bill Burke 517a2b99d7 more tooltips 2014-08-13 12:17:20 -04:00
Bill Burke edf73af508 change password 2014-08-13 10:35:49 -04:00
Bill Burke 4a5ea08a2a Merge pull request #625 from patriot1burke/master
tooltips
2014-08-13 09:42:09 -04:00
Bill Burke 7b86cca649 better tooltip user 2014-08-13 09:40:43 -04:00
Bill Burke c77b7cd7d6 fix required user tooltip 2014-08-13 09:38:56 -04:00
Bill Burke 6b0a87c57a Merge pull request #624 from patriot1burke/master
add js adapter to dist
2014-08-12 18:25:03 -04:00
Bill Burke b1c331c5f3 add js adapter to dist 2014-08-12 18:24:40 -04:00
Bill Burke 7ae342452e Merge pull request #623 from patriot1burke/master
tooltips
2014-08-12 16:31:25 -04:00
Bill Burke 4438aa6606 tooltips 2014-08-12 16:22:26 -04:00
Marek Posolda 8cd8472003 Merge pull request #622 from mposolda/master
Sync admin UI and fixes.
2014-08-12 19:13:50 +02:00
mposolda 687aa78567 Fix issue in sync admin UI 2014-08-12 19:12:05 +02:00
mposolda 8419e5883d Ensure that transaction.isActive() is false after commit or rollback 2014-08-12 18:58:37 +02:00
mposolda 4bac0474c6 Sync UI for generic providers 2014-08-12 18:12:28 +02:00
mposolda f0b66a2241 Admin console UI for sync of users from LDAP. Sync fixes 2014-08-12 18:12:27 +02:00
Bill Burke 51b71e8f20 Merge pull request #621 from patriot1burke/master
refactor UI screens, remove breadcrumbs
2014-08-12 11:09:50 -04:00
Bill Burke 8615515b9a refactor UI screens, remove breadcrumbs 2014-08-12 11:07:39 -04:00
Bill Burke 10cf486d26 Merge pull request #620 from ssilvert/KEYCLOAK-331-ear
KEYCLOAK-331 Fixed NPE when user specifies EAR name instead of WAR in subsystem.
2014-08-12 10:29:46 -04:00
Bill Burke abb1647672 Merge pull request #619 from patriot1burke/master
fix logout
2014-08-12 10:06:44 -04:00
Bill Burke 114c1b95fa fix logout 2014-08-12 10:06:19 -04:00
Stan Silvert 4e88bbc811 KEYCLOAK-331 Fixed NPE when user specifies EAR name instead of WAR in standalone.xml. Also, fixed EAR deployment in general and added EAR example. 2014-08-12 10:03:20 -04:00
Stan Silvert 504a41aec4 KEYCLOAK-331 Fixed NPE when user specifies EAR name instead of WAR in
standalone.xml.  Also, fixed EAR deployment in general and added EAR
example.
2014-08-12 09:58:54 -04:00
Stian Thorgersen e9bf1ef618 Merge pull request #618 from stianst/master
Fix test
2014-08-12 12:14:32 +01:00
Stian Thorgersen 9d6e450c05 Fix test 2014-08-12 12:13:59 +01:00
Stian Thorgersen fb7e95f1e4 Merge pull request #617 from stianst/master
KEYCLOAK-592 Display login form with error message if trying to login wi...
2014-08-12 12:06:39 +01:00
Stian Thorgersen f95418dfc9 KEYCLOAK-592 Display login form with error message if trying to login with social provider where email already exists 2014-08-12 12:06:13 +01:00
Bill Burke 94be235a0f Merge pull request #616 from patriot1burke/master
menu
2014-08-11 17:48:52 -04:00
Bill Burke 100de5a55e menu 2014-08-11 17:47:55 -04:00
Bill Burke 26570de4cd Merge pull request #615 from patriot1burke/master
X-Frame-Options, Content-Security-Policy
2014-08-11 17:45:26 -04:00
Bill Burke 7c97e02715 X-Frame-Options, Content-Security-Policy 2014-08-11 17:45:01 -04:00
Bill Burke e73bdf9d8c Merge pull request #614 from patriot1burke/master
add jpa realm attributes
2014-08-11 12:33:36 -04:00
Bill Burke 8d1ff1d49c add jpa realm attributes 2014-08-11 12:33:17 -04:00
Stian Thorgersen de770d2881 Merge pull request #613 from stianst/master
Added tooltip to realm enabled button
2014-08-11 16:14:14 +01:00
Stian Thorgersen 7f96770089 Added tooltip to realm enabled button 2014-08-11 16:13:38 +01:00
Stian Thorgersen 3f83538fc1 Merge pull request #612 from stianst/master
KEYCLOAK-616 Not require registration to add a new social user
2014-08-11 15:35:54 +01:00
Stian Thorgersen 3040f4e89f KEYCLOAK-616 Not require registration to add a new social user 2014-08-11 15:34:57 +01:00
Marek Posolda c57c264d91 Merge pull request #611 from mposolda/master
Fix transaction handling in KeycloakModelUtils.runJobInTransaction. Star...
2014-08-11 13:53:04 +02:00
mposolda 8ba7559cac Fix transaction handling in KeycloakModelUtils.runJobInTransaction. Start sync tasks for configured federation providers at startup 2014-08-11 13:51:44 +02:00
Marek Posolda c4d5a4138c Merge pull request #610 from mposolda/master
Support for users sync
2014-08-10 23:40:23 +02:00
mposolda d699404ce7 Support for periodic users sync 2014-08-10 23:23:50 +02:00
mposolda ee79747cb6 Sync - first iteration 2014-08-10 23:22:35 +02:00
mposolda 5cb6c4e77c Improve TimerSPI to support cancelling of previously scheduled tasks 2014-08-10 23:17:39 +02:00
Bill Burke 05638a8953 Merge pull request #609 from patriot1burke/master
fixes
2014-08-10 12:29:07 -04:00
Bill Burke 48f7efc97f @NoCache where appropriate 2014-08-10 12:28:43 -04:00
Bill Burke 9aa6b4cbfa optimize imports 2014-08-10 12:17:45 -04:00
Bill Burke cae0a7628d use SecureRandom for totp 2014-08-10 12:12:24 -04:00
Bill Burke 82e29dfcb3 Merge pull request #608 from patriot1burke/master
jiras
2014-08-10 11:50:42 -04:00
Bill Burke ad94b94833 enlarge URL html input 2014-08-10 11:49:58 -04:00
Bill Burke 687e497455 test searchForUserByAttributes 2014-08-10 11:36:02 -04:00
Bill Burke 67f31648a6 Merge pull request #572 from vibe13/duplicated-version
Remove warning from Maven log4j:log4j:jar -> duplicate declaration
2014-08-10 11:04:51 -04:00
Bill Burke d332851a75 Merge pull request #606 from alarikmyrin/KEYCLOAK-621
KEYCLOAK-621 fix searchForUserByAttributes method
2014-08-10 11:02:08 -04:00
Bill Burke 4a18a32cfc Merge pull request #607 from patriot1burke/master
change logout behavior
2014-08-10 09:09:32 -04:00
Alarik Myrin 428cd54a81 KEYCLOAK-621 fix searchForUserByAttributes method so that it works and is not subject to SQL injection 2014-08-09 13:59:20 -04:00
Bill Burke dc4e8603d7 change logout behavior 2014-08-08 18:33:37 -04:00
Marek Posolda b96f8aef6d Merge pull request #605 from mposolda/master
LDAP testing and improvements
2014-08-08 12:24:39 +02:00
mposolda dc50c312cb Configurable if pagination and connectionPooling are supported in LDAP 2014-08-08 12:09:08 +02:00
mposolda 1f12a2d67b Adding LDAPUtils. Bit refactoring LDAP test for easier testing with various servers 2014-08-08 10:40:34 +02:00
Marek Posolda a2bef7dbbe Merge pull request #604 from mposolda/master
Fix testsuite hangs on MySQL and PostgreSQL due to uncommited transactio...
2014-08-07 20:40:12 +02:00
mposolda c6af13c8cc Fix testsuite hangs on MySQL and PostgreSQL due to uncommited transactions 2014-08-07 20:38:20 +02:00
Marek Posolda 5be5f6475f Merge pull request #603 from mposolda/master
Fix adding social link in mongo. Fixed export/import of federationProvid...
2014-08-07 17:39:56 +02:00
mposolda 5673fb34b1 Fix adding social link in mongo. Fixed export/import of federationProviders. Enhanced ExportImportTest 2014-08-07 17:33:48 +02:00
Marek Posolda 5214fe2a55 Merge pull request #602 from mposolda/master
Users not registered with FederationProvider during import, Update docs for database setup
2014-08-07 13:05:23 +02:00
mposolda 76db33829b KEYCLOAK-600 Users shouldn't be registered with Federation Provider on an import 2014-08-07 12:38:56 +02:00
mposolda 746da8f270 Possibility to specify hibernate dialect even if datasource is used 2014-08-07 12:27:12 +02:00
mposolda f8667cdb38 Update documentations for JPA and Mongo 2014-08-07 12:23:46 +02:00
Marek Posolda 1ec4fe921d Merge pull request #601 from mposolda/master
KEYCLOAK-618 Remove org.bouncycastle from jboss-modules-structure.xml as...
2014-08-07 10:34:48 +02:00
mposolda 915701106c KEYCLOAK-618 Remove org.bouncycastle from jboss-modules-structure.xml as it's in auth-server.war 2014-08-07 10:32:26 +02:00
Bill Burke 2309e6f040 Merge pull request #600 from patriot1burke/master
delete fed provider
2014-08-06 20:49:25 -04:00
Bill Burke 839d823edd change delete msg 2014-08-06 20:48:48 -04:00
Bill Burke 99e6f0edad delete fed provider 2014-08-06 20:38:30 -04:00
Bill Burke bb138bd6e4 Merge pull request #599 from patriot1burke/master
KEYCLOAK-547
2014-08-06 19:16:19 -04:00
Bill Burke 32a19563a5 KEYCLOAK-547 2014-08-06 19:15:52 -04:00
Bill Burke 3b65127399 Merge pull request #598 from patriot1burke/master
cookie cache off
2014-08-06 18:04:36 -04:00
Bill Burke c17a5823e9 cookie cache off 2014-08-06 18:01:16 -04:00
Bill Burke c9e88c944a Merge pull request #597 from patriot1burke/master
pom description
2014-08-06 17:50:25 -04:00
Bill Burke b93cf4868c pom description 2014-08-06 17:50:01 -04:00
Bill Burke 53ac88ca26 Merge pull request #596 from patriot1burke/master
version
2014-08-06 15:45:15 -04:00
Bill Burke aff32f69bb version 2014-08-06 15:44:50 -04:00
Bill Burke 4fcf11d0db Merge pull request #595 from patriot1burke/master
bump version
2014-08-06 09:00:47 -04:00
Bill Burke e04af84ac0 bump version 2014-08-06 09:00:23 -04:00
Bill Burke 965c44a43d Merge pull request #594 from patriot1burke/master
beta-4 fixes
2014-08-05 20:58:28 -04:00
Bill Burke 905061e2b7 bump version 2014-08-05 20:52:50 -04:00
Bill Burke 45df3087f2 fix aerogear 2014-08-05 20:45:31 -04:00
Bill Burke f9f53a3355 docbook change 2014-08-05 20:31:20 -04:00
Bill Burke ab08ac8ad4 Merge remote-tracking branch 'upstream/master' 2014-08-05 20:29:02 -04:00
Bill Burke 12c9475bfc general settings split up 2014-08-05 20:26:29 -04:00
Bill Burke a0d7fc12db all claims for app 2014-08-05 19:46:55 -04:00
Bill Burke 5b5fea347a improved oauth login/grant 2014-08-05 19:36:19 -04:00
Bill Burke d049007412 delete app/realm/client buttons 2014-08-05 17:34:23 -04:00
Bill Burke cc14a3b288 rename token settings menu to timeout settings 2014-08-05 17:28:20 -04:00
Bill Burke bcd3eeda49 product-portal example logout fix 2014-08-05 17:20:01 -04:00
Bill Burke 992b365eab choose realm 2014-08-05 17:18:11 -04:00
Bill Burke 3882cc4aa8 fix console session logoutAll 2014-08-05 17:16:46 -04:00
Bill Burke 38bd79ab88 filter out unconfigured example files 2014-08-05 16:53:10 -04:00
Bill Burke 790fd1d94d fix cors example 2014-08-05 16:45:21 -04:00
Bill Burke 19e1ddff1d logging 2014-08-05 16:04:13 -04:00
Marek Posolda 0bbc26bd0b Merge pull request #593 from mposolda/db-fix
Updating documentation for export/import
2014-08-05 20:30:05 +02:00
mposolda 1f3db436d8 Updating documentation for export/import 2014-08-05 20:28:53 +02:00
Marek Posolda 7ac663bd5f Merge pull request #592 from mposolda/db-fix
Fixing mssql
2014-08-05 18:30:55 +02:00
mposolda 53fbceb49a Fixing mssql 2014-08-05 18:25:54 +02:00
Marek Posolda 1159dc091d Merge pull request #591 from mposolda/db-fix
Fixing oracle
2014-08-05 15:55:53 +02:00
mposolda 38c0b4ad65 Fixing oracle 2014-08-05 15:45:28 +02:00
Marek Posolda f4f563d570 Merge pull request #590 from mposolda/master
Fix typo in UserFederationProvider
2014-08-05 15:07:42 +02:00
mposolda 550ba16a09 Fix deleting users on mongo 2014-08-05 14:36:53 +02:00
mposolda 0289f5dff9 Fix typo in UserFederationProvider 2014-08-05 13:31:35 +02:00
Bill Burke ea0ceeb65d Merge pull request #589 from patriot1burke/master
app full scope
2014-08-04 16:26:51 -04:00
Bill Burke 3746bf28a1 migration doc 2014-08-04 16:26:13 -04:00
Bill Burke a497c69758 relative logout 2014-08-04 16:17:35 -04:00
Bill Burke 731d75c756 app full scope by default 2014-08-04 16:04:10 -04:00
Marek Posolda 982ba5ab90 Merge pull request #588 from mposolda/master
Adding property to configure if userAccountControls should be updated in...
2014-08-04 21:35:02 +02:00
mposolda c2e2a46025 Adding property to configure if userAccountControls should be updated in Active Directory after user set his password 2014-08-04 21:32:56 +02:00
Bill Burke 8430fb0ed3 Merge pull request #587 from patriot1burke/master
docs
2014-08-04 12:28:32 -04:00
Bill Burke 9a829a38b1 edti migration docs 2014-08-04 12:28:07 -04:00
Bill Burke 04ec750157 federation docs 2014-08-04 12:25:11 -04:00
Marek Posolda 3655db2a30 Merge pull request #586 from mposolda/master
Ensure that displayName is persisted. Add 'user' to ActiveDirectory clas...
2014-08-04 16:43:41 +02:00
mposolda 5edb84ccfb Ensure that displayName is persisted. Add 'user' to ActiveDirectory classes 2014-08-04 16:42:48 +02:00
Marek Posolda 95e2da9c9e Merge pull request #585 from mposolda/master
Upgrade to latest picketlink. Fix LDAP configuration according to that
2014-08-04 14:58:29 +02:00
mposolda 6cb1eb41cf Update mongo entities 2014-08-04 14:51:08 +02:00
mposolda 46a0caf2e0 Upgrade to latest picketlink. Fix LDAP configuration according to that 2014-08-04 13:58:52 +02:00
Bill Burke d96b660686 Merge pull request #584 from patriot1burke/master
fix fed example
2014-08-03 11:04:21 -04:00
Bill Burke ae66b1b88e fix view all users 2014-08-03 11:03:39 -04:00
Bill Burke 60a564dcfd fix fed example 2014-08-03 10:53:37 -04:00
Bill Burke 69656d2775 Merge pull request #583 from patriot1burke/master
delete auth prov example
2014-08-02 22:19:59 -04:00
Bill Burke 24415f2186 delete auth prov example 2014-08-02 22:19:19 -04:00
Bill Burke 0ae3eafe10 Merge pull request #582 from patriot1burke/master
fed example
2014-08-02 22:18:47 -04:00
Bill Burke 6cf708f6e1 fed exampe 2014-08-02 22:18:17 -04:00
Bill Burke f5a626006c Merge pull request #581 from patriot1burke/master
remove AuthenticationProvider/Link
2014-08-01 18:06:18 -04:00
Bill Burke 101a72cd65 remove AuthenticationProvider/Link 2014-08-01 18:03:48 -04:00
Bill Burke 312429cb88 Merge pull request #580 from patriot1burke/master
add HttpServletRequest.authenticate() test
2014-08-01 15:50:40 -04:00
Bill Burke c9851f1c05 add HttpServletRequest.authenticate() test 2014-08-01 15:50:20 -04:00
Bill Burke 73b7fe6169 Merge pull request #579 from patriot1burke/master
remote token validation
2014-08-01 13:34:11 -04:00
Bill Burke d1c5c55a61 switch to a get 2014-08-01 13:28:17 -04:00
Bill Burke bdc31d9459 Merge remote-tracking branch 'upstream/master' 2014-08-01 13:18:46 -04:00
Bill Burke f08c42a37e token validation 2014-08-01 13:18:32 -04:00
Stian Thorgersen 8fbd39934f Merge pull request #578 from stianst/master
Allow private addresses to use http with ssl-required=external
2014-08-01 15:06:15 +01:00
Stian Thorgersen c460630cf8 Allow private addresses to use http with ssl-required=external 2014-08-01 15:05:45 +01:00
Stian Thorgersen 335bc87ad8 Merge pull request #577 from stianst/master
KEYCLOAK-591 Require SSL for all external requests by default
2014-08-01 13:53:04 +01:00
Stian Thorgersen 6cbeeb1b1a KEYCLOAK-591 Require SSL for all external requests by default 2014-08-01 13:52:04 +01:00
Bill Burke 47c9f1439d Merge pull request #576 from patriot1burke/master
maxResults
2014-07-31 17:41:58 -04:00
Bill Burke 64589bc807 maxResults 2014-07-31 17:41:38 -04:00
Bill Burke 2eae9c17a4 Merge pull request #575 from patriot1burke/master
ldap edit mode
2014-07-31 17:31:46 -04:00
Bill Burke 9f6c206078 ldap edit mode 2014-07-31 17:28:48 -04:00
Bill Burke 2460eecd75 Merge pull request #574 from patriot1burke/master
federation registeration
2014-07-31 16:02:52 -04:00
Bill Burke a084695978 support registration ldap 2014-07-31 15:22:20 -04:00
Bill Burke 705da88daa fix cache setup 2014-07-31 14:05:23 -04:00
Bill Burke ce85a42ecf Merge pull request #573 from patriot1burke/master
fed ui
2014-07-31 13:14:45 -04:00
Bill Burke 2990b75faa Merge remote-tracking branch 'upstream/master' 2014-07-31 13:14:05 -04:00
Bill Burke 94c06f3f5d fed ui 2014-07-31 13:13:48 -04:00
Bill Burke b72a7db6fe federation display name 2014-07-31 10:51:04 -04:00
Andrea Vibelli 9e4086e501 Remove warning from Maven log4j:log4j:jar -> duplicate declaration 2014-07-31 11:06:24 +02:00
Bill Burke b960f18f4e Merge pull request #571 from patriot1burke/master
federation ui
2014-07-30 22:53:10 -04:00
Bill Burke d0dc75c06f federation ui 2014-07-30 22:52:39 -04:00
Bill Burke 13a5eccaf8 Merge pull request #570 from patriot1burke/master
federation refactor
2014-07-30 16:06:57 -04:00
Bill Burke 898195e1da Merge remote-tracking branch 'upstream/master' 2014-07-30 16:02:09 -04:00
Bill Burke 8ea0d19d2f federation refactor 2014-07-30 16:01:54 -04:00
Stian Thorgersen 465318b352 Merge pull request #569 from stianst/master
KEYCLOAK-545 Stop NPE if no client_secret is specified or bearer-only ap...
2014-07-30 16:42:26 +01:00
Stian Thorgersen fa01d53f9e KEYCLOAK-545 Stop NPE if no client_secret is specified or bearer-only application is used for grants/access 2014-07-30 16:41:07 +01:00
Stian Thorgersen ba8fe1ddaf Merge pull request #568 from stianst/master
KEYCLOAK-562 Cache theme instances
2014-07-30 16:10:41 +01:00
Stian Thorgersen 50bc53d673 KEYCLOAK-562 Cache theme instances 2014-07-30 16:06:08 +01:00
Stian Thorgersen d682701232 Merge pull request #567 from stianst/master
Added login_hint to keycloak.js
2014-07-30 14:27:40 +01:00
Stian Thorgersen 544883ca9f Added login_hint to keycloak.js 2014-07-30 14:27:14 +01:00
Stian Thorgersen 54a7761e15 Merge pull request #566 from stianst/master
Updated admin endpoints and console to use oauth client name/clientId
2014-07-30 14:18:45 +01:00
Stian Thorgersen ed51b4e1ea Deleted old hybrid model 2014-07-30 14:13:16 +01:00
Stian Thorgersen fcc4781e3a Updated admin endpoints and console to use oauth client name/clientId to retrieve a oauth client 2014-07-30 14:10:25 +01:00
Stian Thorgersen 24b5bd6862 Merge pull request #565 from stianst/master
KEYCLOAK-581 Add login_hint query param to login
2014-07-30 13:48:17 +01:00
Stian Thorgersen 614c718304 KEYCLOAK-581 Add login_hint query param to login 2014-07-30 13:43:46 +01:00
Stian Thorgersen e2ce33a86a Merge pull request #564 from stianst/master
Admin REST client
2014-07-30 13:26:04 +01:00
Rodrigo Sasaki e338f1af15 Admin REST client 2014-07-30 13:24:44 +01:00
Stian Thorgersen eefc5ed1d7 Merge pull request #563 from lfryc/KEYCLOAK-588
KEYCLOAK-588 retrieve window.location.origin in InternetExplorer-compatible way
2014-07-30 12:15:16 +01:00
Lukas Fryc 7694b130e6 KEYCLOAK-588 retrieve window.location.origin in InternetExplorer-compatible way 2014-07-30 12:47:52 +02:00
Stian Thorgersen 32ad7271f3 Merge pull request #562 from stianst/access-code
Fix test
2014-07-30 09:47:35 +01:00
Stian Thorgersen 2b012ff238 Fix test 2014-07-30 09:47:16 +01:00
Stian Thorgersen 1bd219ed40 Merge pull request #561 from stianst/access-code
Added ClientSessionModel to UserSessionProvider
2014-07-29 16:18:28 +01:00
Stian Thorgersen 02a59812e6 Added ClientSessionModel to UserSessionProvider 2014-07-29 16:10:41 +01:00
Stian Thorgersen 7f4849e165 Merge pull request #560 from stianst/demo-non-localhost
KEYCLOAK-579 Use relative urls in examples
2014-07-28 10:48:30 +01:00
Stian Thorgersen 628c7dd92a KEYCLOAK-579 Use relative urls in examples 2014-07-28 10:41:21 +01:00
Davide Ungari 5764ad84e9 Fix equals huge error, too much Javascript lately 2014-07-27 10:02:41 +02:00
Davide Ungari f3fde4a8df Upgrade to tomcat.7.0.54 2014-07-27 10:01:02 +02:00
Davide Ungari 983ccdd121 Merge remote-tracking branch 'upstream/master' 2014-07-26 11:27:08 +02:00
Davide Ungari 73ed22c52c logout 2014-07-26 11:25:27 +02:00
Bill Burke bace16bac6 Merge pull request #559 from patriot1burke/master
federation iteration 2
2014-07-25 21:06:04 -04:00
Bill Burke 3bb0842eae federation iteration 2 2014-07-25 21:05:45 -04:00
Bill Burke a6b38397ea Merge pull request #558 from patriot1burke/master
rename classes
2014-07-25 10:45:22 -04:00
Bill Burke c63467c79f Merge remote-tracking branch 'upstream/master' 2014-07-25 10:41:06 -04:00
Bill Burke b1cd37814a rename 2014-07-25 10:40:46 -04:00
Stian Thorgersen 07d10ee583 Merge pull request #557 from stianst/access-code
KEYCLOAK-570 Add use-resource-role-mappings to WildFly installation
2014-07-25 11:54:10 +01:00
Stian Thorgersen 614bee3061 KEYCLOAK-570 Add use-resource-role-mappings to WildFly installation 2014-07-25 11:53:10 +01:00
Bill Burke 81dfea4052 Merge pull request #556 from patriot1burke/master
rename FederationProvider to UserFederationProvider
2014-07-24 11:11:45 -04:00
Bill Burke 1b14444eba rename FederationProvider to UserFederationProvider 2014-07-24 11:11:21 -04:00
Stian Thorgersen 245d83adce Merge pull request #555 from stianst/master
Added test to make sure password is verified with totp login
2014-07-24 14:15:34 +01:00
Stian Thorgersen b5835fc232 Added test to make sure password is verified with totp login 2014-07-24 14:15:02 +01:00
Stian Thorgersen 8a54f133ba Merge pull request #554 from stianst/master
Moved audit/tests and model/tests to testsuite
2014-07-24 13:50:15 +01:00
Stian Thorgersen 511cc483cb Moved audit/tests and model/tests to testsuite 2014-07-24 13:49:15 +01:00
Bill Burke 6e18a16f78 Merge pull request #553 from patriot1burke/master
Federation iteration 1
2014-07-23 17:08:00 -04:00
Bill Burke 43d08f2d05 federation iteration 1 complete 2014-07-23 17:05:49 -04:00
Bill Burke 171e9b1ce9 Merge remote-tracking branch 'upstream/master' 2014-07-23 15:10:48 -04:00
Bill Burke eec582e704 merge 2014-07-23 15:10:36 -04:00
Stian Thorgersen 4b05feb6d6 Merge pull request #552 from stianst/access-code
Updates to AccessCode
2014-07-23 16:01:38 +01:00
Stian Thorgersen d6f5bf6cde Moved rememberMe, usernameUsed fields from AccessCode to UserSessions. Change AccessCode to have a single action instead of a list of required actions, also used action for codes that needs user to grant permissions first. Finally removed expiration time on access code and use timestamp directly 2014-07-23 15:58:09 +01:00
Bill Burke f1d72d0b6d fed 2 2014-07-23 10:42:18 -04:00
Bill Burke 148d494905 federation iteration 2014-07-23 10:21:25 -04:00
Stian Thorgersen 38b575d91b Merge pull request #550 from mposolda/master
README update
2014-07-23 13:31:41 +01:00
mposolda baf99a2280 README update 2014-07-23 14:01:24 +02:00
Stian Thorgersen 1d80b87bcc Merge pull request #549 from stianst/master
Fix parent relative-path in server-all and server-min
2014-07-22 16:55:51 +01:00
Stian Thorgersen 84754c47d3 Fix parent relative-path in server-all and server-min 2014-07-22 16:55:33 +01:00
Stian Thorgersen 64b8a990f9 Merge pull request #548 from stianst/master
KEYCLOAK-567 Added server-dep-min and server-dep-all poms
2014-07-22 14:11:05 +01:00
Stian Thorgersen 0580c2223b KEYCLOAK-567 Added server-dep-min and server-dep-all poms 2014-07-22 14:10:38 +01:00
Stian Thorgersen 824aed773b Merge pull request #547 from stianst/jpa-fix
Add jboss.as.jpa.managed=false to persistence.xml
2014-07-22 10:08:24 +01:00
Stian Thorgersen 9164e69d49 Add jboss.as.jpa.managed=false to persistence.xml 2014-07-22 09:40:52 +01:00
Stian Thorgersen 670dc39d4f Merge pull request #546 from stianst/access-code
Remove access token from access code, and create token when code is exchanged for token
2014-07-22 09:37:54 +01:00
Stian Thorgersen b196d0dded Remove access token from access code, and create token when code is exchanged for token 2014-07-22 09:37:21 +01:00
Stian Thorgersen bfd62b0807 Merge pull request #545 from mposolda/master
Fix MySQL and PostgreSQL. More DB schema refactoring
2014-07-22 09:10:52 +01:00
mposolda 3514d5cd78 Fix MySQL and PostgreSQL testsuite (was caused by uncommited transaction) 2014-07-22 07:53:05 +02:00
mposolda b3b46339a4 More DB schema refactoring. Ensure that all columns are named in code 2014-07-22 07:53:05 +02:00
Stian Thorgersen 9ff4947abd Merge pull request #540 from mposolda/master
Update DB profiles. Fix ExportImportTest to not clash with other tests
2014-07-21 14:18:04 +01:00
Stian Thorgersen 469eb77486 Merge pull request #544 from stianst/master
KEYCLOAK-569 Check application roles for scope
2014-07-21 13:52:43 +01:00
Stian Thorgersen 213b685b43 KEYCLOAK-569 Check application roles for scope 2014-07-21 13:50:27 +01:00
mposolda 42df327104 Update DB profiles. Fix ExportImportTest to not clash with other tests 2014-07-21 08:48:25 +02:00
Bill Burke d2b42e3843 Merge pull request #542 from patriot1burke/master
remove hack comment
2014-07-18 12:07:51 -04:00
Bill Burke b999c1e5b1 remove hack comment 2014-07-18 12:07:30 -04:00
Bill Burke 2ecf696a12 Merge pull request #541 from patriot1burke/master
cache config and cache docs
2014-07-18 11:48:54 -04:00
Bill Burke 063a63445a keycloak-json fix 2014-07-18 11:45:47 -04:00
Bill Burke b84bdcf464 cache config 2014-07-18 11:43:44 -04:00
Bill Burke f275ecf6d5 cache settings 2014-07-18 11:30:10 -04:00
Stian Thorgersen b241920802 Merge pull request #539 from stianst/master
Updated aerogear-ups integration readme
2014-07-18 12:14:53 +01:00
Stian Thorgersen dcd1406a27 Updated aerogear-ups integration readme 2014-07-18 12:14:29 +01:00
Stian Thorgersen d2d408e223 Merge pull request #538 from stianst/master
Added profile for building AeroGear project-integrations for WildFly
2014-07-18 12:10:27 +01:00
Stian Thorgersen 9699d8aa82 Added profile for building AeroGear project-integrations for WildFly 2014-07-18 12:09:54 +01:00
Stian Thorgersen 6d8d9107c6 Merge pull request #537 from stianst/master
Configure db in keycloak-server.json
2014-07-18 11:35:33 +01:00
Stian Thorgersen fb8483dc56 Added support to specify dialect for JPA 2014-07-18 11:32:09 +01:00
Stian Thorgersen 85621bdd9f KEYCLOAK-566 Configure db in keycloak-server.json instead of persistence.xml 2014-07-18 11:21:52 +01:00
Bill Burke 573f7fc1fb Merge pull request #535 from mposolda/master
Export/import improvements and fixes
2014-07-17 16:34:39 -04:00
Bill Burke 14af840c3a Merge pull request #536 from patriot1burke/master
realmId and rroleId
2014-07-17 16:34:27 -04:00
Bill Burke aa2d1bcc93 db schema 2014-07-17 16:32:36 -04:00
Bill Burke 20cde9cd00 realmId and roleId used in User and user relationships 2014-07-17 15:41:02 -04:00
mposolda 3dff4afe83 Export/import improvements and fixes 2014-07-17 21:31:33 +02:00
Bill Burke 3edce7f580 named queries and roleId in RoleMapping 2014-07-17 15:20:56 -04:00
Stian Thorgersen 35d601d795 Merge pull request #534 from stianst/master
Removed long ids and replaced with composite ids
2014-07-17 11:57:56 +01:00
Stian Thorgersen f00957ec3a Commented out test in ExportImportTest that breakes the other tests 2014-07-17 11:57:33 +01:00
Stian Thorgersen 46c04561ff Removed long ids and replaced with composite ids 2014-07-17 11:16:15 +01:00
Stian Thorgersen 9abe357754 Merge pull request #533 from mposolda/master
Added method UserProvider.getUsersCount(). Refactor export-import witth users pagination
2014-07-17 10:50:52 +01:00
mposolda 3c99350247 Fix testsuite to use mongo for realms,users and audit when keycloak.realm.provider=mongo 2014-07-17 11:05:51 +02:00
mposolda b041f2a857 Added method UserProvider.getUsersCount(). Refactor export-import with users pagination available 2014-07-17 10:15:13 +02:00
mposolda 0a15f873af Minor improvement in AbstractKeycloakRule.stopServer() 2014-07-17 10:14:35 +02:00
Bill Burke 08b0aebe03 Merge pull request #532 from patriot1burke/master
jpa schema changes
2014-07-16 19:38:01 -04:00
Bill Burke a323fe7992 schema changes 2014-07-16 19:34:54 -04:00
Bill Burke 1963e94e33 use long for primary key 2014-07-16 17:11:59 -04:00
Bill Burke 7437af0131 Merge pull request #530 from ssilvert/master
Rename and update XSD to comply with WildFly testsuite.
2014-07-16 15:31:56 -04:00
Bill Burke 60a1fc3020 Merge pull request #531 from mposolda/master
Fix ExportImportTest on som envs like windows
2014-07-16 15:31:45 -04:00
mposolda 8714193c97 Fix ExportImportTest to pass on windows 2014-07-16 20:00:18 +02:00
Stan Silvert a61733cf47 Rename and update XSD to comply with WildFly testsuite. 2014-07-16 13:44:57 -04:00
mposolda 1aff8af336 Enable ExportImportTest 2014-07-16 19:43:47 +02:00
Stian Thorgersen c21be01e97 Merge pull request #529 from stianst/master
KEYCLOAK-435 Added pagination support for users
2014-07-16 18:04:36 +01:00
Stian Thorgersen 72d240a57e KEYCLOAK-435 Added pagination support for users 2014-07-16 17:54:11 +01:00
Stian Thorgersen 83769b3d52 Merge pull request #528 from stianst/master
Fix redirect-loop in keycloak.js
2014-07-16 17:39:15 +01:00
Stian Thorgersen 1a5c2365a1 Fix redirect-loop in keycloak.js 2014-07-16 17:38:56 +01:00
Bill Burke 87e40f1820 Merge pull request #527 from patriot1burke/master
move credential validation to UserProvider
2014-07-16 12:08:50 -04:00
Bill Burke 8fbfba907b Merge remote-tracking branch 'upstream/master' 2014-07-16 12:05:31 -04:00
Bill Burke f342a8c7a3 move credential validation to UserProvider 2014-07-16 12:05:15 -04:00
Stian Thorgersen 866715b752 Merge pull request #526 from stianst/master
KEYCLOAK-559 If session iframe is enabled, check this before doing a log...
2014-07-16 10:48:14 +01:00
Stian Thorgersen e0ec121012 KEYCLOAK-559 If session iframe is enabled, check this before doing a login if onload is check-sso 2014-07-16 10:47:42 +01:00
Stian Thorgersen 63ff5736a2 Merge pull request #525 from stianst/mysql-5.1-fix
KEYCLOAK-554 Fix for MySQL 5.1. Set length of keys to 36 for uuid's or 200 for others
2014-07-16 09:52:18 +01:00
Stian Thorgersen 3451778f48 KEYCLOAK-554 Fix for MySQL 5.1. Set length of keys to 36 for uuid's or 200 for others 2014-07-16 09:51:31 +01:00
Bill Burke e4b3007ce2 Merge pull request #524 from patriot1burke/master
user provider split
2014-07-15 15:45:30 -04:00
Bill Burke a5593469ae rename ModelProvider->RealmProvider 2014-07-15 15:44:50 -04:00
Bill Burke 484a4c1454 user provider refactor complete 2014-07-15 15:25:06 -04:00
Bill Burke 09a336c708 Merge pull request #523 from mposolda/master
Export/import into representations
2014-07-15 12:14:11 -04:00
Bill Burke 4ac5fb08e3 Merge remote-tracking branch 'upstream/master' 2014-07-15 12:11:24 -04:00
Bill Burke ff86bdc35f userprovider split 2014-07-15 12:11:12 -04:00
mposolda 726ce08700 More cleanup and removed export-import-impl module 2014-07-15 16:43:55 +02:00
mposolda c14840a4c0 More cleanup after rebase 2014-07-15 14:44:38 +02:00
mposolda 24a492ffe0 Export/import refactoring to use same representation as admin endpoints 2014-07-15 05:35:24 +02:00
Stian Thorgersen c4ff4e030a Merge pull request #522 from stianst/master
Removed dep on model-jpa from export-import-impl
2014-07-14 17:31:55 +01:00
Stian Thorgersen 7244944879 Removed dep on model-jpa from export-import-impl 2014-07-14 17:31:35 +01:00
Stian Thorgersen 1f2db2c049 Merge pull request #521 from stianst/master
KEYCLOAK-556 NullPointerException in project-integrations example on Wil...
2014-07-14 17:08:30 +01:00
Stian Thorgersen d6e8b1ba2c KEYCLOAK-556 NullPointerException in project-integrations example on WildFly 2014-07-14 17:07:38 +01:00
Stian Thorgersen 7f0a3eebfb Merge pull request #520 from stianst/master
Fix project-integrations/aerogear-ups
2014-07-14 16:38:58 +01:00
Stian Thorgersen 5d0345c922 Fix project-integrations/aerogear-ups 2014-07-14 16:38:39 +01:00
Bill Burke 99a041158c Merge pull request #519 from patriot1burke/master
TM.enlistAfterCompletion
2014-07-14 11:37:16 -04:00
Bill Burke 8f7efd5b67 merge 2014-07-14 11:36:57 -04:00
Bill Burke d2c27daa16 changes 2014-07-14 11:31:25 -04:00
Stian Thorgersen 2d2041db5e Merge pull request #518 from stianst/master
Lazy load connections
2014-07-14 16:29:12 +01:00
Stian Thorgersen e3f260c57f Added lazy load to connection factories, to make sure we only try to connect to JPA/Mongo when used 2014-07-14 16:28:47 +01:00
Stian Thorgersen 8113c3f05e Fixes to persistence.xml 2014-07-14 15:55:26 +01:00
Stian Thorgersen e3bc15a4d9 Merge pull request #516 from stianst/master
KEYCLOAK-512 Pagination support for sessions
2014-07-14 12:01:56 +01:00
Stian Thorgersen 3f68180ee7 KEYCLOAK-512 Pagination support for sessions 2014-07-14 11:49:59 +01:00
Stian Thorgersen 6bb6dc0aaf Merge pull request #515 from stianst/master
Added JPA connection provider and added basic support for multiple trans...
2014-07-14 10:13:45 +01:00
Stian Thorgersen d625fb014c Added JPA connection provider and added basic support for multiple transactions to KeycloakSession 2014-07-14 10:10:03 +01:00
Bill Burke 8cc7676335 Merge pull request #514 from patriot1burke/master
enlist
2014-07-11 19:44:01 -04:00
Bill Burke 626cecba95 enlist 2014-07-11 19:43:37 -04:00
Bill Burke 65348cd5e7 Merge pull request #513 from patriot1burke/master
session transaction
2014-07-11 19:38:58 -04:00
Bill Burke 5f5316fbdc session transaction 2014-07-11 19:29:11 -04:00
Stian Thorgersen 011bac7a1e Merge pull request #512 from stianst/master
Started UserSessionProvider
2014-07-10 16:50:54 +01:00
Stian Thorgersen 86671a2354 Started UserSessionProvider 2014-07-10 16:48:25 +01:00
Bill Burke 8fac39fffa Merge pull request #511 from ssilvert/master
In WF subsystem, make WildFly dependencies provided scope.
2014-07-09 13:54:24 -04:00
Stan Silvert a2710e01da In WF subsystem, make WildFly dependencies provided scope. 2014-07-09 13:33:14 -04:00
Stian Thorgersen 38abcd4a90 Merge pull request #510 from stianst/master
Revert JPA model provider
2014-07-09 15:44:05 +01:00
Stian Thorgersen 62dd6fbc6b Revert JPA model provider 2014-07-09 15:40:23 +01:00
Stian Thorgersen 75c56a2a7c Merge pull request #509 from stianst/master
KEYCLOAK-553 Added minified keycloak.js
2014-07-09 14:17:36 +01:00
Stian Thorgersen 7491b1c369 KEYCLOAK-553 Added minified keycloak.js 2014-07-09 12:23:29 +01:00
Stian Thorgersen a3cca7424a Merge pull request #508 from stianst/master
Removed JPA model provider
2014-07-08 15:36:33 +01:00
Stian Thorgersen 387aed6269 Removed JPA model provider 2014-07-08 15:35:49 +01:00
Stian Thorgersen 20bf888d73 Merge pull request #507 from stianst/master
Removed model methods from KeycloakSession
2014-07-08 15:28:13 +01:00
Stian Thorgersen ad6d52cb0f Removed model methods from KeycloakSession 2014-07-08 15:27:42 +01:00
Stian Thorgersen 8dc293f629 Removed removeAllData from model 2014-07-08 15:27:42 +01:00
Bill Burke de8819aae3 Merge pull request #506 from ssilvert/master
KEYCLOAK-555 Subsystem needs template for new WildFly build.
2014-07-08 10:02:10 -04:00
Stan Silvert e98ced5d0f KEYCLOAK-555 Subsystem needs template for new WildFly build. 2014-07-08 09:39:44 -04:00
Stian Thorgersen 6775af302a Merge pull request #505 from stianst/master
Added hybrid model provider with jpa stores
2014-07-08 12:04:36 +01:00
Stian Thorgersen 621cae61b6 Added hybrid model provider with jpa stores 2014-07-08 12:04:09 +01:00
Bill Burke 922a8f7eef Merge pull request #504 from patriot1burke/master
fix json file
2014-07-07 18:51:59 -04:00
Bill Burke 48a0e564b9 fix json file 2014-07-07 18:51:38 -04:00
Bill Burke 0758d89a59 Merge pull request #502 from mposolda/master
Changes in representations - adding role mappings under user representat...
2014-07-07 18:41:42 -04:00
Bill Burke e94b6acd02 Merge pull request #503 from patriot1burke/master
admin rest api test
2014-07-07 18:38:08 -04:00
Bill Burke a1beff7d3d admin rest api test 2014-07-07 18:37:30 -04:00
mposolda ffc30b4c03 Changes in representations - adding role mappings under user representation 2014-07-07 22:48:53 +02:00
Bill Burke 6d824231e9 Merge pull request #501 from patriot1burke/master
fix delete when cache is on
2014-07-07 15:04:18 -04:00
Bill Burke 060a90197e Merge remote-tracking branch 'upstream/master' 2014-07-07 15:00:05 -04:00
Bill Burke df7aac01dd fix delete realm 2014-07-07 14:59:51 -04:00
Bill Burke 69b00d859b Merge pull request #497 from mposolda/performance
More performance testing stuff
2014-07-07 14:59:41 -04:00
mposolda 9c88979040 Added UsersJob for generic job related to users. Support for sync/async jobs. Configurable host/port 2014-07-07 20:31:43 +02:00
Bill Burke bda218af07 Merge pull request #500 from patriot1burke/master
configurable hash iterations
2014-07-07 12:12:25 -04:00
Bill Burke 15d7568792 configurable hash iterations 2014-07-07 12:11:45 -04:00
Stian Thorgersen 18b14b54f4 Merge pull request #499 from stianst/master
Remove notBefore from users
2014-07-07 16:26:31 +01:00
Stian Thorgersen 38857cf2e6 Remove notBefore from users 2014-07-07 16:23:53 +01:00
Stian Thorgersen 0647590170 Merge pull request #498 from stianst/master
Rename loginName to username
2014-07-07 15:58:26 +01:00
Stian Thorgersen 099743d448 Rename loginName to username 2014-07-07 15:56:21 +01:00
Bill Burke 4cbc423d67 Merge pull request #496 from patriot1burke/master
turn on cache for testsuite
2014-07-03 15:30:05 -04:00
Bill Burke e37b5613ed turn on cache 2014-07-03 15:29:31 -04:00
Bill Burke f92ad89a6c Merge pull request #495 from patriot1burke/master
HttpServletRequest.logout()
2014-07-03 14:08:43 -04:00
Bill Burke e99a675c50 HttpServletRequest.logout() 2014-07-03 14:08:19 -04:00
Stian Thorgersen 4593bff76f Merge pull request #494 from vibe13/master
Alignment of dependencies to other JBoss projects
2014-07-03 09:18:34 +01:00
Andrea Vibelli 81d6590544 Removed unused property resteasy.version.eap.6.3, resteasy.version has the same value and it is the one used for consuming 2.3.7.Final version 2014-07-02 15:10:24 +02:00
Andrea Vibelli 2f9597cf51 Alignment of com.h2database:h2 to version 1.3.168 (was 1.3.161) 2014-07-02 14:53:57 +02:00
Andrea Vibelli 8a246a6444 Extraction of hardcoded version of org.jboss.logging:jboss-logging into properties; alignment of org.jboss.logging:jboss-logging to a unique version 3.1.4.GA (was 3.1.1.GA and 3.1.2.GA) 2014-07-02 14:35:57 +02:00
Stian Thorgersen 876d493458 Merge pull request #491 from jpkrohling/JPK-LocationSearchInsteadHref
Changed window.location.href to search.
2014-07-01 10:10:21 +01:00
Stian Thorgersen 6f023fcae4 Merge pull request #490 from mposolda/performance
Added module performance-web for testing Keycloak endpoints with JMeter
2014-07-01 09:50:15 +01:00
Bill Burke 0abd93417a Merge pull request #492 from patriot1burke/master
model fix for caching
2014-06-30 13:13:16 -04:00
Bill Burke b4f5fe9977 model fix for caching 2014-06-30 13:12:42 -04:00
Juraci Paixão Kröhling e15b0c7d90 Changed window.location.href to search. 2014-06-30 17:56:53 +02:00
Stian Thorgersen 3cf52b018c Merge pull request #489 from smysnk/master
Add AMD support to keycloak javascript adapter
2014-06-30 10:22:55 +01:00
mposolda cb9f159091 Added JMeter. Added KeycloakPerfServer into maven. 2014-06-30 09:45:20 +02:00
Joshua Bellamy-Henn 64cea5f25a Add AMD support to keycloak javascript adapter 2014-06-27 11:24:29 -06:00
mposolda b6fd58e644 Support for configuring number of worker threads in undertow 2014-06-27 17:25:47 +02:00
mposolda de774a3058 Add classes classifier to performance-tools war, so classes can be reused in performance-web module 2014-06-27 15:51:02 +02:00
mposolda 9ebe2ff45e Added support for get-users-count and create-available-users into PerfTools 2014-06-27 15:51:02 +02:00
mposolda 4ebc575afc Change perf test to parse accessToken and refreshToken in Servlet. Support for logout 2014-06-27 15:51:01 +02:00
mposolda a1d4d8e13f Work in progress... 2014-06-27 15:51:01 +02:00
mposolda 69f7dfbb47 Added performance-web module 2014-06-27 15:51:01 +02:00
mposolda 99ce0a36e6 Refactoring current performance test 2014-06-27 15:51:01 +02:00
Stian Thorgersen 67c34554db Merge pull request #488 from stianst/master
Fix reset password test
2014-06-27 14:49:57 +01:00
Stian Thorgersen 9ba61af83b Fix reset password test 2014-06-27 14:48:36 +01:00
Stian Thorgersen 436f5f6229 Merge pull request #487 from stianst/master
KEYCLOAK-501 Check if old session for browser exists and delete before c...
2014-06-27 13:58:23 +01:00
Stian Thorgersen 270d6108ca KEYCLOAK-501 Check if old session for browser exists and delete before creating a new 2014-06-27 12:55:33 +01:00
Stian Thorgersen 18094370a6 Merge pull request #486 from stianst/master
Bug fixes
2014-06-27 12:21:39 +01:00
Stian Thorgersen 26eac398e0 KEYCLOAK-541 Create session after resetting password through email 2014-06-27 12:20:32 +01:00
Stian Thorgersen 93c896b4f7 KEYCLOAK-543 Set sent date on emails 2014-06-27 12:19:56 +01:00
Stian Thorgersen 6b29202f1f Merge pull request #485 from stianst/master
Added mail server to test tools
2014-06-27 11:11:52 +01:00
Stian Thorgersen 3b1d8fd8fe Added mail server to test tools 2014-06-27 11:11:33 +01:00
Stian Thorgersen 630d62f014 Merge pull request #484 from stianst/master
Refactor to KeycloakSession
2014-06-27 09:54:31 +01:00
Stian Thorgersen 711b8ca747 Return null for selected provider if empty string 2014-06-27 09:39:21 +01:00
Stian Thorgersen 34a1923d18 Refactor to prepar for splitting model 2014-06-27 09:39:06 +01:00
Stian Thorgersen 6291936ce9 Disable cache as it's not working
Conflicts:
	project-integrations/aerogear-ups/auth-server/src/main/webapp/WEB-INF/keycloak-server.json
	server/src/main/resources/META-INF/keycloak-server.json
	testsuite/tools/src/main/resources/META-INF/keycloak-server.json
2014-06-27 09:38:13 +01:00
Stian Thorgersen 5220c6c288 Merge pull request #483 from mposolda/master
KEYCLOAK-540 Broken project-integrations/aerogear-ups. Move keycloak-ser...
2014-06-25 14:41:56 +01:00
mposolda 532c82f752 KEYCLOAK-540 Broken project-integrations/aerogear-ups. Move keycloak-server.json to correct location, so it's used instead of SystemPropertiesConfigProvider 2014-06-25 15:27:38 +02:00
Stian Thorgersen 61218715af Merge pull request #482 from mposolda/master
LDAP: configurable LDAP Object Classes for User
2014-06-25 09:46:17 +01:00
mposolda 8dce5a90bb LDAP: configurable LDAP Object Classes for User 2014-06-25 07:59:58 +02:00
Stian Thorgersen 8d794b8151 Merge pull request #481 from mposolda/ldap
Ldap improvements and fixes
2014-06-24 09:37:47 +01:00
mposolda b1cfab34fd Support for test of LDAP connection and authentication 2014-06-24 10:03:14 +02:00
mposolda 159a5e20bf Possibility to configure ldap attribute, which is mapped to username, through admin console 2014-06-23 17:54:11 +02:00
mposolda aea4fd8e30 Upgrade to picketlink 2.6.0.CR5. Support for sync whole UserModel into AuthenticationProvider 2014-06-23 15:29:00 +02:00
mposolda 767e6a9783 Add ActiveDirectory fix to properly support sAMAccountName as username 2014-06-23 15:29:00 +02:00
Stian Thorgersen bb8ac0000e Merge pull request #480 from stianst/master
Started test tools module
2014-06-23 11:45:21 +01:00
Stian Thorgersen d73d2e0788 Started test tools module 2014-06-23 11:37:03 +01:00
Bill Burke 714e83198e Merge pull request #479 from patriot1burke/master
perf test fix
2014-06-20 17:15:35 -04:00
Bill Burke c780918501 perf test fix 2014-06-20 17:15:16 -04:00
Bill Burke 8bcb01fadb Merge pull request #478 from patriot1burke/master
user cache
2014-06-20 17:08:16 -04:00
Bill Burke f78f5366cf Merge remote-tracking branch 'upstream/master' 2014-06-20 17:07:50 -04:00
Bill Burke f0d02f24b1 user cache 2014-06-20 17:06:56 -04:00
Bill Burke 15bc33f8e6 Merge pull request #477 from patriot1burke/master
stateless access codes
2014-06-20 10:38:46 -04:00
Bill Burke d21a19925b stateless access codes 2014-06-20 10:37:27 -04:00
Bill Burke a1e9d99d3e Merge remote-tracking branch 'upstream/master' 2014-06-19 08:50:34 -04:00
Bill Burke 094cf675c7 user cache 2014-06-19 08:50:19 -04:00
Stian Thorgersen efcb7ee110 Merge pull request #476 from mposolda/beta-3-testing
Improvement for AD integration to avoid exception when mulitple users wi...
2014-06-19 13:02:36 +01:00
mposolda c8321fc96e Improvement for AD integration to avoid exception when mulitple users without email are synced to Keycloak DB 2014-06-19 13:43:44 +02:00
Stian Thorgersen 56ea29e899 Merge pull request #475 from stianst/master
Bumped version to 1.0-beta-4-SNAPSHOT
2014-06-19 10:20:13 +01:00
Stian Thorgersen df2305eb02 Bumped version to 1.0-beta-4-SNAPSHOT 2014-06-19 10:19:10 +01:00
Stian Thorgersen 5281793078 Merge pull request #474 from mposolda/beta-3-testing
fix javascript error when click on 'Show Expires' and token is not activ...
2014-06-18 17:11:49 +01:00
mposolda 9beb210c23 fix javascript error when click on 'Show Expires' and token is not active 2014-06-18 18:08:05 +02:00
Stian Thorgersen d1c890db18 Merge pull request #472 from mposolda/db-fixes
KEYCLOAK-534 Fix MS-SQL, Oracle and Sybase
2014-06-18 13:32:57 +01:00
Stian Thorgersen 0be4a4b71d Merge pull request #473 from stianst/master
Documentation to reverse proxy config
2014-06-18 13:13:11 +01:00
mposolda 19a545049b KEYCLOAK-536 Fix Sybase - role can't be used as column name as it's keyword in sybase 2014-06-18 12:31:55 +02:00
Stian Thorgersen 34eb34c5fc Added documentation to specify https redirect port 2014-06-18 11:08:06 +01:00
Stian Thorgersen 28adc28a56 Add instructions to configure a reverse proxy with KC 2014-06-18 09:59:23 +01:00
mposolda 5d8c803da6 Remove duplicite dependency declarations to remove maven warnings 2014-06-18 10:31:56 +02:00
mposolda 2fd7fdaa74 KEYCLOAK-535 Fix Keycloak with Oracle 2014-06-18 10:29:57 +02:00
mposolda f9cb99a1ee KEYCLOAK-534 Fix MS-SQL 2014-06-17 19:41:19 +02:00
Stian Thorgersen 37bfb2c594 Merge pull request #471 from stianst/master
KEYCLOAK-533
2014-06-17 15:38:16 +01:00
Stian Thorgersen 3b55248e6c KEYCLOAK-533 2014-06-17 15:30:50 +01:00
Stian Thorgersen b35bccdad2 Merge pull request #470 from stianst/master
KEYCLOAK-530
2014-06-17 14:11:48 +01:00
Stian Thorgersen 6cabf3e57d KEYCLOAK-530 2014-06-17 14:11:31 +01:00
Stian Thorgersen b31b54e17c Merge pull request #469 from stianst/master
KEYCLOAK-532
2014-06-17 14:07:26 +01:00
Stian Thorgersen 469d044254 KEYCLOAK-532 2014-06-17 14:07:07 +01:00
Stian Thorgersen 9a26d7078f Merge pull request #468 from stianst/master
KEYCLOAK-520
2014-06-17 11:21:54 +01:00
Stian Thorgersen 896c32a660 KEYCLOAK-520 2014-06-17 11:21:36 +01:00
Stian Thorgersen 6e23613b9e Merge pull request #467 from stianst/master
Disable cache provider for beta-3 release
2014-06-17 11:07:27 +01:00
Stian Thorgersen d15324110e Disable cache provider for beta-3 release 2014-06-17 11:06:08 +01:00
Stian Thorgersen 153de54fe8 Merge pull request #466 from stianst/master
KEYCLOAK-526 Fix iframe origin when auth server url is relative
2014-06-16 17:55:27 +01:00
Stian Thorgersen 2866f6fc23 KEYCLOAK-526 Fix iframe origin when auth server url is relative 2014-06-16 17:55:03 +01:00
Bill Burke 9228f0c076 Merge pull request #465 from patriot1burke/master
keycloak-521
2014-06-16 11:59:52 -04:00
Bill Burke 1eafb01c8d keycloak-521 2014-06-16 11:59:27 -04:00
Bill Burke 44f446e745 Merge pull request #464 from patriot1burke/master
keycloak-518
2014-06-16 10:48:34 -04:00
Bill Burke c71fdc72c7 keycloak-518 2014-06-16 10:43:50 -04:00
Bill Burke bbf944a225 Merge pull request #463 from patriot1burke/master
oops show-sql=false
2014-06-16 10:28:28 -04:00
Bill Burke dbc5641144 oops show-sql=false 2014-06-16 10:28:06 -04:00
Bill Burke 9080a64fcd Merge pull request #462 from patriot1burke/master
better fetch for role mappings
2014-06-16 10:16:22 -04:00
Bill Burke f50177996d better fetch for role mappings 2014-06-16 10:15:53 -04:00
Bill Burke b649dd39d9 Merge pull request #461 from patriot1burke/master
caching
2014-06-13 20:09:03 -04:00
Bill Burke ab87c03732 cache 1st iteration finished 2014-06-13 19:39:20 -04:00
Bill Burke 8eaf77b3c1 cache impl again 2014-06-13 19:05:05 -04:00
Bill Burke cbea141a54 cache impl 2014-06-13 17:17:45 -04:00
Bill Burke 60a040a141 Merge pull request #460 from patriot1burke/master
refactor for caching
2014-06-13 09:49:08 -04:00
Bill Burke 4a518c964b mongo refactor for caching 2014-06-12 16:51:19 -04:00
Bill Burke bb2ad656a3 cache implement 2014-06-12 11:45:50 -04:00
Bill Burke 30b95e0a57 Merge remote-tracking branch 'upstream/master' 2014-06-12 11:12:22 -04:00
Bill Burke 852c631eff Merge pull request #459 from ssilvert/master
KEYCLOAK-522 Refactor Undertow Adapter so that it can optionally be used without the Servlet API.
2014-06-12 11:12:07 -04:00
Bill Burke 211a279248 Merge remote-tracking branch 'upstream/master' 2014-06-12 11:11:27 -04:00
Bill Burke 2ae2067841 refactor for caching again 2014-06-12 11:11:14 -04:00
Bill Burke 0dd06e3343 model refactor for caching 2014-06-10 18:50:08 -04:00
Stan Silvert 4e9bec69e4 Add Apache 2.0 license 2014-06-09 16:43:45 -04:00
Stan Silvert 70392d9f1a KEYCLOAK-522 Refactor Undertow Adapter so that it can optionally be used
without the Servlet API.
2014-06-09 16:43:44 -04:00
Bill Burke 9a3abf6a6a Merge pull request #458 from mposolda/master
Support for Active Directory and RHDS
2014-06-09 15:15:15 -04:00
mposolda 0bfcbdb359 Support for Active Directory and RHDS 2014-06-09 16:20:19 +02:00
Bill Burke 2f3c8bf079 cache refactor 2014-06-06 15:12:58 -04:00
Stian Thorgersen e7bde986aa Merge pull request #457 from stianst/master
KEYCLOAK-504 Using https results in RuntimeException if sslRequired is set to false
2014-06-06 14:54:40 +01:00
Stian Thorgersen f3211bf34d KEYCLOAK-504
Using https results in RuntimeException if sslRequired is set to false
2014-06-06 14:54:11 +01:00
Stian Thorgersen c086e0a502 Merge pull request #456 from stianst/master
KEYCLOAK-500
2014-06-06 09:53:08 +01:00
Stian Thorgersen 80f4b668b2 KEYCLOAK-500
Redundant condition in keycloak.js
2014-06-06 09:52:25 +01:00
Stian Thorgersen 01606ab5e0 Merge pull request #455 from stianst/master
KEYCLOAK-496 Dependency jira alignments with other JBoss projects
2014-06-05 15:25:37 +01:00
Stian Thorgersen 91e29d9710 KEYCLOAK-496 Dependency jira alignments with other JBoss projects 2014-06-05 13:33:48 +01:00
Stian Thorgersen 23d101f8fa Merge pull request #454 from rodrigopsasaki/issue-keycloak-519
Issue KEYCLOAK-519
2014-06-05 13:30:00 +01:00
Rodrigo Sasaki e08b3e7dec flipped comparison operands to avoid NPE 2014-06-05 09:24:06 -03:00
Stian Thorgersen c4e32b7c45 Merge pull request #453 from stianst/stateless-social
Fix
2014-06-05 11:13:38 +01:00
Stian Thorgersen 14ece40054 Removed file that shouldn't have been committed 2014-06-05 11:12:47 +01:00
Stian Thorgersen eaa6be55d7 KEYCLOAK-496 Removed commons-io 2014-06-05 10:41:37 +01:00
Stian Thorgersen 2ae714aea2 Merge pull request #452 from stianst/stateless-social
KEYCLOAK-244 Social should be stateless
2014-06-05 10:40:07 +01:00
Stian Thorgersen 5f6687ec62 KEYCLOAK-244 Social should be stateless 2014-06-05 10:09:17 +01:00
Stian Thorgersen 06053fad85 Merge pull request #451 from stianst/master
KEYCLOAK-510
2014-06-04 12:34:29 +01:00
Stian Thorgersen d0c06ab0ce KEYCLOAK-510
NPE in ExtendingThemeManager
2014-06-04 12:26:24 +01:00
Stian Thorgersen cfb6f927b2 Merge pull request #450 from jimbo1007/jsfix
add missing initPromise.setSuccess()
2014-06-03 15:02:18 +01:00
unknown 8d33894989 add missing initPromise.setSuccess() 2014-06-03 09:28:01 -04:00
Bill Burke ba13cbe004 Merge pull request #449 from patriot1burke/master
fix deadlocks
2014-06-02 21:34:43 -04:00
Bill Burke 9410adf9ce fix deadlocks 2014-06-02 21:33:43 -04:00
Bill Burke 7443c78087 Merge pull request #448 from patriot1burke/master
bump version again
2014-06-02 14:22:10 -04:00
Bill Burke d5b34a0b41 bump version again 2014-06-02 13:12:04 -04:00
Bill Burke 0cd64e297a Merge pull request #447 from patriot1burke/master
bump version
2014-06-02 12:22:40 -04:00
Bill Burke 0fcf80dd6e bump version 2014-06-02 12:21:58 -04:00
Bill Burke 56e9e0b4f9 Merge pull request #446 from patriot1burke/master
NPE in as7 adapter logout
2014-06-02 12:03:09 -04:00
Bill Burke dfcd3267e4 NPE in as7 adapter logout 2014-06-02 12:02:42 -04:00
Bill Burke f689747fd6 Merge pull request #445 from patriot1burke/master
wildfly ssl fixes
2014-06-02 11:22:51 -04:00
Bill Burke bb11165568 wildfly ssl fixes 2014-06-02 11:22:19 -04:00
Bill Burke a180c6b896 Merge remote-tracking branch 'upstream/master' 2014-06-02 09:37:30 -04:00
Bill Burke 34d3be244d bump undertow version 2014-06-02 09:37:18 -04:00
Stian Thorgersen 4662781213 Merge pull request #443 from lnewson/master
Fixed an integer overflow that caused the token to be refreshed too often
2014-06-02 09:35:11 +01:00
Stian Thorgersen 5bd12a708f Merge pull request #444 from lnewson/social-fix
Fixed an NPE when the social users name is null
2014-06-02 09:34:32 +01:00
Bill Burke e39149c954 Merge remote-tracking branch 'upstream/master' 2014-06-01 18:03:49 -04:00
Bill Burke b925a97b5d bump wildfly version 2014-06-01 18:03:39 -04:00
Lee Newson 3bcf2c81da Fixed an NPE when the users name is null 2014-05-31 10:39:34 +10:00
Lee Newson b52801de25 Fixed an integer overflow that caused the token to always be refreshed 2014-05-31 10:26:06 +10:00
Stian Thorgersen 4d8c3d7d73 Merge pull request #442 from stianst/master
Cache for FreeMarker templates and set cache-control for static resources from themes
2014-05-30 17:03:37 +01:00
Stian Thorgersen ea1f10361a Cache FreeMarker templates 2014-05-30 16:59:25 +01:00
Stian Thorgersen 5dafad71ac Set cache-control on static resources from themes 2014-05-30 16:59:25 +01:00
Bill Burke df28fb97ed Merge pull request #440 from stianst/master
Bump version to 1.0.beta2-SNAPSHOT
2014-05-30 08:56:00 -04:00
Stian Thorgersen 5600018a56 Merge pull request #441 from mposolda/master
Basic fix of performance tests and added README. Still requires work...
2014-05-30 10:37:05 +01:00
mposolda 441c00c06f Basic fix of performance tests and added README. Still requires work... 2014-05-30 11:03:16 +02:00
Stian Thorgersen 9533bbc47d Merge pull request #439 from mposolda/master
Fix js-console on FF
2014-05-30 08:55:33 +01:00
Stian Thorgersen 2025d314ec Bump version to 1.0.beta2-SNAPSHOT 2014-05-30 08:52:03 +01:00
mposolda 772f991545 Fix js-console on FF 2014-05-29 18:56:34 +02:00
1120 changed files with 42261 additions and 24100 deletions

No files matched your search

+32 -1
View File
@@ -1,4 +1,35 @@
keycloak
========
SSO Service for web apps and REST services.
Please visit [http://keycloak.org](http://keycloak.org) for more information on Keycloak including how to download, documentation,
and video tutorials.
Keycloak is an SSO Service for web apps and REST services.
It can be used for social applications as well as enterprise applications. It is based on OpenID Connect with SAML support in the works.
Here's some of the features:
* SSO and Single Log Out for browser applications
* Social Broker. Enable Google, Facebook, Yahoo, Twitter social login with no code required.
* Optional LDAP/Active Directory integration
* Optional User Registration
* Password and TOTP support (via Google Authenticator). Client cert auth coming soon.
* User session management from both admin and user perspective
* Customizable themes for user facing pages: login, grant pages, account management, emails, and admin console all customizable!
* OAuth Bearer token auth for REST Services
* Integrated Browser App to REST Service token propagation
* Admin REST API
* OAuth 2.0 Grant requests
* CORS Support
* CORS Web Origin management and validation
* Completely centrally managed user and role mapping metadata. Minimal configuration at the application side
* Admin Console for managing users, roles, role mappings, applications, user sessions, allowed CORS web origins, and OAuth clients.
* Deployable as a WAR, appliance, or an Openshift cloud service (SaaS).
* Supports JBoss AS7, EAP 6.x, and Wildfly applications. Plans to support Node.js, RAILS, GRAILS, and other non-Java applications.
* Javascript/HTML 5 adapter for pure Javascript apps
* Session management from admin console
* Revocation policies
* Password policies
* OpenID Connect Support
Please visit [http://keycloak.org](http://keycloak.org) for more information on Keycloak including how to download, documentation,
and video tutorials.
@@ -1,2 +0,0 @@
org.keycloak.audit.AuditProviderSpi
org.keycloak.audit.AuditListenerSpi
@@ -1 +0,0 @@
org.keycloak.audit.email.EmailAuditListenerFactory
@@ -1 +0,0 @@
org.keycloak.audit.log.JBossLoggingAuditListenerFactory
@@ -1 +0,0 @@
org.keycloak.audit.jpa.JpaAuditProviderFactory
@@ -1,15 +0,0 @@
package org.keycloak.audit.jpa;
import org.keycloak.audit.tests.AbstractAuditProviderTest;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class JpaAuditProviderTest extends AbstractAuditProviderTest {
@Override
protected String getProviderId() {
return JpaAuditProviderFactory.ID;
}
}
@@ -1,22 +0,0 @@
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="jpa-keycloak-audit-store" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>org.keycloak.audit.jpa.EventEntity</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.connection.url" value="jdbc:h2:mem:test"/>
<property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
<property name="hibernate.connection.username" value="sa"/>
<property name="hibernate.connection.password" value=""/>
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
-136
View File
@@ -1,136 +0,0 @@
<?xml version="1.0"?>
<project>
<parent>
<artifactId>keycloak-audit-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.0-beta-1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-audit-mongo</artifactId>
<name>Keycloak Audit Mongo Provider</name>
<description/>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-audit-api</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-audit-tests</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<keycloak.audit.mongo.host>localhost</keycloak.audit.mongo.host>
<keycloak.audit.mongo.port>27018</keycloak.audit.mongo.port>
<keycloak.audit.mongo.db>keycloak</keycloak.audit.mongo.db>
<keycloak.audit.mongo.clearOnStartup>true</keycloak.audit.mongo.clearOnStartup>
<keycloak.audit.mongo.bindIp>127.0.0.1</keycloak.audit.mongo.bindIp>
</properties>
<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>
<!-- Postpone tests to "integration-test" phase, so that we can bootstrap embedded mongo on 27018 before running tests -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>test</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<systemPropertyVariables>
<keycloak.audit.mongo.host>${keycloak.audit.mongo.host}</keycloak.audit.mongo.host>
<keycloak.audit.mongo.port>${keycloak.audit.mongo.port}</keycloak.audit.mongo.port>
<keycloak.audit.mongo.db>${keycloak.audit.mongo.db}</keycloak.audit.mongo.db>
<keycloak.audit.mongo.clearOnStartup>${keycloak.audit.mongo.clearOnStartup}</keycloak.audit.mongo.clearOnStartup>
<keycloak.audit.mongo.bindIp>${keycloak.model.mongo.bindIp}</keycloak.audit.mongo.bindIp>
</systemPropertyVariables>
</configuration>
</execution>
<execution>
<id>default-test</id>
<configuration>
<skip>true</skip>
</configuration>
</execution>
</executions>
</plugin>
<!-- Embedded mongo -->
<plugin>
<groupId>com.github.joelittlejohn.embedmongo</groupId>
<artifactId>embedmongo-maven-plugin</artifactId>
<executions>
<execution>
<id>start-mongodb</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<port>${keycloak.audit.mongo.port}</port>
<logging>file</logging>
<logFile>${project.build.directory}/mongodb.log</logFile>
<bindIp>${keycloak.audit.mongo.bindIp}</bindIp>
</configuration>
</execution>
<execution>
<id>stop-mongodb</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
@@ -1,96 +0,0 @@
package org.keycloak.audit.mongo;
import com.mongodb.DB;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.WriteConcern;
import org.jboss.logging.Logger;
import org.keycloak.Config;
import org.keycloak.audit.AuditProvider;
import org.keycloak.audit.AuditProviderFactory;
import org.keycloak.audit.EventType;
import org.keycloak.provider.ProviderSession;
import java.net.UnknownHostException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class MongoAuditProviderFactory implements AuditProviderFactory {
protected static final Logger logger = Logger.getLogger(MongoAuditProviderFactory.class);
public static final String ID = "mongo";
private MongoClient client;
private DB db;
private Set<EventType> includedEvents = new HashSet<EventType>();
@Override
public AuditProvider create(ProviderSession providerSession) {
return new MongoAuditProvider(db.getCollection("audit"), includedEvents);
}
@Override
public void init(Config.Scope config) {
try {
String host = config.get("host", ServerAddress.defaultHost());
int port = config.getInt("port", ServerAddress.defaultPort());
String dbName = config.get("db", "keycloak-audit");
boolean clearOnStartup = config.getBoolean("clearOnStartup", false);
String user = config.get("user");
String password = config.get("password");
if (user != null && password != null) {
MongoCredential credential = MongoCredential.createMongoCRCredential(user, dbName, password.toCharArray());
client = new MongoClient(new ServerAddress(host, port), Collections.singletonList(credential));
} else {
client = new MongoClient(host, port);
}
client.setWriteConcern(WriteConcern.UNACKNOWLEDGED);
db = client.getDB(dbName);
if (clearOnStartup) {
db.getCollection("audit").drop();
}
logger.infof("Initialized mongo audit. host: %s, port: %d, db: %s, clearOnStartup: %b", host, port, dbName, clearOnStartup);
} catch (UnknownHostException e) {
throw new RuntimeException(e);
}
String[] include = config.getArray("include-events");
if (include != null) {
for (String i : include) {
includedEvents.add(EventType.valueOf(i.toUpperCase()));
}
} else {
for (EventType i : EventType.values()) {
includedEvents.add(i);
}
}
String[] exclude = config.getArray("exclude-events");
if (exclude != null) {
for (String e : exclude) {
includedEvents.remove(EventType.valueOf(e.toUpperCase()));
}
}
}
@Override
public void close() {
client.close();
}
@Override
public String getId() {
return ID;
}
}
@@ -1 +0,0 @@
org.keycloak.audit.mongo.MongoAuditProviderFactory
@@ -1,15 +0,0 @@
package org.keycloak.audit.mongo;
import org.keycloak.audit.tests.AbstractAuditProviderTest;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class MongoAuditProviderTest extends AbstractAuditProviderTest {
@Override
protected String getProviderId() {
return MongoAuditProviderFactory.ID;
}
}
@@ -1,139 +0,0 @@
package org.keycloak.audit.tests;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.keycloak.Config;
import org.keycloak.audit.AuditProvider;
import org.keycloak.audit.AuditProviderFactory;
import org.keycloak.audit.Event;
import org.keycloak.audit.EventType;
import org.keycloak.provider.ProviderFactory;
import java.util.HashMap;
import java.util.Map;
import java.util.ServiceLoader;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public abstract class AbstractAuditProviderTest {
private ProviderFactory<AuditProvider> factory;
private AuditProvider provider;
@Before
public void before() {
String providerId = getProviderId();
ServiceLoader<AuditProviderFactory> factories = ServiceLoader.load(AuditProviderFactory.class);
for (AuditProviderFactory f : factories) {
if (f.getId().equals(providerId)) {
factory = f;
factory.init(Config.scope("audit", providerId));
}
}
provider = factory.create(null);
}
protected abstract String getProviderId();
@After
public void after() {
provider.clear();
provider.close();
factory.close();
}
@Test
public void save() {
provider.onEvent(create(EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
}
@Test
public void query() {
long oldest = System.currentTimeMillis() - 30000;
long newest = System.currentTimeMillis() + 30000;
provider.onEvent(create(EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
provider.onEvent(create(newest, EventType.REGISTER, "realmId", "clientId", "userId", "127.0.0.1", "error"));
provider.onEvent(create(newest, EventType.REGISTER, "realmId", "clientId", "userId2", "127.0.0.1", "error"));
provider.onEvent(create(EventType.LOGIN, "realmId2", "clientId", "userId", "127.0.0.1", "error"));
provider.onEvent(create(oldest, EventType.LOGIN, "realmId", "clientId2", "userId", "127.0.0.1", "error"));
provider.onEvent(create(EventType.LOGIN, "realmId", "clientId", "userId2", "127.0.0.1", "error"));
provider.close();
provider = factory.create(null);
Assert.assertEquals(5, provider.createQuery().client("clientId").getResultList().size());
Assert.assertEquals(5, provider.createQuery().realm("realmId").getResultList().size());
Assert.assertEquals(4, provider.createQuery().event(EventType.LOGIN).getResultList().size());
Assert.assertEquals(6, provider.createQuery().event(EventType.LOGIN, EventType.REGISTER).getResultList().size());
Assert.assertEquals(4, provider.createQuery().user("userId").getResultList().size());
Assert.assertEquals(1, provider.createQuery().user("userId").event(EventType.REGISTER).getResultList().size());
Assert.assertEquals(2, provider.createQuery().maxResults(2).getResultList().size());
Assert.assertEquals(1, provider.createQuery().firstResult(5).getResultList().size());
Assert.assertEquals(newest, provider.createQuery().maxResults(1).getResultList().get(0).getTime());
Assert.assertEquals(oldest, provider.createQuery().firstResult(5).maxResults(1).getResultList().get(0).getTime());
}
@Test
public void clear() {
provider.onEvent(create(System.currentTimeMillis() - 30000, EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
provider.onEvent(create(System.currentTimeMillis() - 20000, EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
provider.onEvent(create(System.currentTimeMillis(), EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
provider.onEvent(create(System.currentTimeMillis(), EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
provider.onEvent(create(System.currentTimeMillis() - 30000, EventType.LOGIN, "realmId2", "clientId", "userId", "127.0.0.1", "error"));
provider.close();
provider = factory.create(null);
provider.clear("realmId");
Assert.assertEquals(1, provider.createQuery().getResultList().size());
}
@Test
public void clearOld() {
provider.onEvent(create(System.currentTimeMillis() - 30000, EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
provider.onEvent(create(System.currentTimeMillis() - 20000, EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
provider.onEvent(create(System.currentTimeMillis(), EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
provider.onEvent(create(System.currentTimeMillis(), EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
provider.onEvent(create(System.currentTimeMillis() - 30000, EventType.LOGIN, "realmId2", "clientId", "userId", "127.0.0.1", "error"));
provider.close();
provider = factory.create(null);
provider.clear("realmId", System.currentTimeMillis() - 10000);
Assert.assertEquals(3, provider.createQuery().getResultList().size());
}
private Event create(EventType event, String realmId, String clientId, String userId, String ipAddress, String error) {
return create(System.currentTimeMillis(), event, realmId, clientId, userId, ipAddress, error);
}
private Event create(long time, EventType event, String realmId, String clientId, String userId, String ipAddress, String error) {
Event e = new Event();
e.setTime(time);
e.setEvent(event);
e.setRealmId(realmId);
e.setClientId(clientId);
e.setUserId(userId);
e.setIpAddress(ipAddress);
e.setError(error);
Map<String, String> details = new HashMap<String, String>();
details.put("key1", "value1");
details.put("key2", "value2");
e.setDetails(details);
return e;
}
}
@@ -1,15 +0,0 @@
package org.keycloak.authentication;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class AuthProviderConstants {
// Model is default provider. See AuthenticationProviderModel.DEFAULT_PROVIDER
public static final String PROVIDER_NAME_MODEL = "model";
public static final String PROVIDER_NAME_EXTERNAL_MODEL = "externalModel";
public static final String PROVIDER_NAME_PICKETLINK = "picketlink";
// Used in external-model provider
public static final String EXTERNAL_REALM_ID = "externalRealmId";
}
@@ -1,12 +0,0 @@
package org.keycloak.authentication;
/**
* Result of authentication by AuthenticationProvider
*
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public enum AuthProviderStatus {
SUCCESS, INVALID_CREDENTIALS, FAILED
}
@@ -1,83 +0,0 @@
package org.keycloak.authentication;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class AuthUser {
private String id;
private String username;
private String firstName;
private String lastName;
private String email;
private String providerName;
public AuthUser(String id, String username, String providerName) {
this.id = id;
this.username = username;
this.providerName = providerName;
}
public String getId() {
return id;
}
public AuthUser setId(String id) {
this.id = id;
return this;
}
public String getUsername() {
return username;
}
public AuthUser setUsername(String username) {
this.username = username;
return this;
}
public String getFirstName() {
return firstName;
}
public AuthUser setName(String name) {
int i = name.lastIndexOf(' ');
if (i != -1) {
firstName = name.substring(0, i);
lastName = name.substring(i + 1);
} else {
firstName = name;
}
return this;
}
public AuthUser setName(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
return this;
}
public String getLastName() {
return lastName;
}
public String getEmail() {
return email;
}
public AuthUser setEmail(String email) {
this.email = email;
return this;
}
public String getProviderName() {
return providerName;
}
public AuthUser setProviderName(String providerName) {
this.providerName = providerName;
return this;
}
}
@@ -1,68 +0,0 @@
package org.keycloak.authentication;
import java.util.List;
import java.util.Map;
import org.keycloak.models.RealmModel;
import org.keycloak.provider.Provider;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public interface AuthenticationProvider extends Provider {
String getName();
/**
* Get names of all available configuration options of current provider
*
* @return options or empty list if no options available
*/
List<String> getAvailableOptions();
/**
* Get user by given username or email. Return user instance or null if user doesn't exists in this authentication provider
*
* @param realm
* @param configuration
* @param username or email
* @return found user or null if user with given username doesn't exists
* @throws AuthenticationProviderException
*/
AuthUser getUser(RealmModel realm, Map<String, String> configuration, String username) throws AuthenticationProviderException;
/**
* Try to register user with this authentication provider
*
* @param realm
* @param configuration
* @param username
* @return ID of newly created user (For example ID from LDAP)
* @throws AuthenticationProviderException if user creation couldn't happen
*/
String registerUser(RealmModel realm, Map<String, String> configuration, String username) throws AuthenticationProviderException;
/**
* Standard Authentication flow
*
* @param username
* @param password
* @return result of authentication, which might eventually encapsulate info about authenticated user and provider which successfully authenticated
*/
AuthProviderStatus validatePassword(RealmModel realm, Map<String, String> configuration, String username, String password) throws AuthenticationProviderException;
/**
* Update credential
*
* @param realm
* @param configuration
* @param username
* @param password
* @return true if credential has been successfully updated
* @throws AuthenticationProviderException
*/
boolean updateCredential(RealmModel realm, Map<String, String> configuration, String username, String password) throws AuthenticationProviderException;
}
@@ -1,24 +0,0 @@
package org.keycloak.authentication;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class AuthenticationProviderException extends Exception {
private static final long serialVersionUID = 15L;
protected AuthenticationProviderException() {
}
public AuthenticationProviderException(String message) {
super(message);
}
public AuthenticationProviderException(Throwable cause) {
super(cause);
}
public AuthenticationProviderException(String message, Throwable cause) {
super(message, cause);
}
}
@@ -1,9 +0,0 @@
package org.keycloak.authentication;
import org.keycloak.provider.ProviderFactory;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public interface AuthenticationProviderFactory extends ProviderFactory<AuthenticationProvider> {
}
@@ -1,219 +0,0 @@
package org.keycloak.authentication;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jboss.logging.Logger;
import org.keycloak.models.AuthenticationLinkModel;
import org.keycloak.models.AuthenticationProviderModel;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserModel;
import org.keycloak.provider.ProviderSession;
import org.keycloak.util.ProviderLoader;
/**
* Access point to authentication SPI. It finds configured and available {@link AuthenticationProvider} instances for current realm
* and then delegates method call to them.
*
* Example of usage: AuthenticationProviderManager.getManager(realm).validateUser("joe", "password");
*
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class AuthenticationProviderManager {
private static final Logger logger = Logger.getLogger(AuthenticationProviderManager.class);
private final RealmModel realm;
private final Map<String, AuthenticationProvider> delegates;
public static AuthenticationProviderManager getManager(RealmModel realm, ProviderSession providerSession) {
Iterable<AuthenticationProvider> providers = providerSession.getAllProviders(AuthenticationProvider.class);
Map<String, AuthenticationProvider> providersMap = new HashMap<String, AuthenticationProvider>();
for (AuthenticationProvider provider : providers) {
providersMap.put(provider.getName(), provider);
}
return new AuthenticationProviderManager(realm, providersMap);
}
public AuthenticationProviderManager(RealmModel realm, Map<String, AuthenticationProvider> delegates) {
this.realm = realm;
this.delegates = delegates;
}
public AuthUser getUser(String username) {
List<AuthenticationProviderModel> authProviderModels = getConfiguredProviderModels(realm);
for (AuthenticationProviderModel providerModel : authProviderModels) {
AuthenticationProvider delegate = getProvider(providerModel.getProviderName());
if (delegate == null) {
continue;
}
try {
AuthUser authUser = delegate.getUser(realm, providerModel.getConfig(), username);
if (authUser != null) {
logger.debugf("User '%s' found with provider '%s'", username, providerModel.getProviderName());
return authUser;
}
} catch (AuthenticationProviderException ape) {
logger.warn(ape.getMessage(), ape);
}
}
logger.debugf("User '%s' not found with any provider", username);
return null;
}
public AuthProviderStatus validatePassword(UserModel user, String password) {
AuthenticationLinkModel authLink = realm.getAuthenticationLink(user);
if (authLink == null) {
// User not yet linked with any authenticationProvider. Find provider with biggest priority where he is and link
AuthUser authUser = getUser(user.getLoginName());
authLink = new AuthenticationLinkModel(authUser.getProviderName(), authUser.getId());
realm.setAuthenticationLink(user, authLink);
logger.infof("User '%s' linked with provider '%s'", authUser.getUsername(), authUser.getProviderName());
}
String providerName = authLink.getAuthProvider();
AuthenticationProviderModel providerModel = getConfiguredProviderModel(realm, providerName);
AuthenticationProvider delegate = getProvider(providerName);
if (delegate == null || providerModel == null) {
return AuthProviderStatus.FAILED;
}
try {
checkCorrectAuthLink(delegate, providerModel, authLink, user.getLoginName());
AuthProviderStatus currentResult = delegate.validatePassword(realm, providerModel.getConfig(), user.getLoginName(), password);
logger.debugf("Authentication provider '%s' finished with '%s' for authentication of '%s'", delegate.getName(), currentResult.toString(), user.getLoginName());
return currentResult;
} catch (AuthenticationProviderException ape) {
logger.warn(ape.getMessage(), ape);
return AuthProviderStatus.FAILED;
}
}
public boolean updatePassword(UserModel user, String password) throws AuthenticationProviderException {
AuthenticationLinkModel authLink = realm.getAuthenticationLink(user);
if (authLink == null) {
// Find provider with biggest priority where password update is supported. Then register user here and link him
List<AuthenticationProviderModel> configuredProviders = getConfiguredProviderModels(realm);
for (AuthenticationProviderModel providerModel : configuredProviders) {
if (providerModel.isPasswordUpdateSupported()) {
AuthenticationProvider delegate = getProvider(providerModel.getProviderName());
if (delegate != null) {
AuthUser authUser = delegate.getUser(realm, providerModel.getConfig(), user.getLoginName());
if (authUser != null) {
// Linking existing user supported just for "model" provider. In other cases throw exception
if (providerModel.getProviderName().equals(AuthenticationProviderModel.DEFAULT_PROVIDER.getProviderName())) {
authLink = new AuthenticationLinkModel(providerModel.getProviderName(), authUser.getId());
realm.setAuthenticationLink(user, authLink);
logger.infof("User '%s' linked with provider '%s'", authUser.getUsername(), authUser.getProviderName());
} else {
throw new AuthenticationProviderException("User " + authUser.getUsername() + " exists in provider "
+ authUser.getProviderName() + " but is not linked with model user");
}
} else {
String userIdInProvider = delegate.registerUser(realm, providerModel.getConfig(), user.getLoginName());
authLink = new AuthenticationLinkModel(providerModel.getProviderName(), userIdInProvider);
realm.setAuthenticationLink(user, authLink);
logger.infof("User '%s' registered in provider '%s' and linked", user.getLoginName(), providerModel.getProviderName());
}
break;
}
}
}
if (authLink == null) {
logger.warnf("No providers found where password update is supported for user '%s'", user.getLoginName());
return false;
}
}
String providerName = authLink.getAuthProvider();
AuthenticationProviderModel providerModel = getConfiguredProviderModel(realm, providerName);
if (providerModel == null) {
return false;
}
String username = user.getLoginName();
// Update just those, which support password update
if (providerModel.isPasswordUpdateSupported()) {
try {
AuthenticationProvider delegate = getProvider(providerName);
if (delegate == null) {
return false;
}
checkCorrectAuthLink(delegate, providerModel, authLink, username);
if (delegate.updateCredential(realm,providerModel.getConfig(), user.getLoginName(), password)) {
logger.debugf("Updated password in authentication provider '%s' for user '%s'", providerName, username);
return true;
} else {
logger.warnf("Password not updated in authentication provider '%s' for user '%s'", providerName, username);
return false;
}
} catch (AuthenticationProviderException ape) {
// Rethrow it to upper layer
logger.warn("Failed to update password: " + ape.getMessage());
throw ape;
}
} else {
logger.warnf("Skip password update for authentication provider '%s' for user '%s'", providerName, username);
return false;
}
}
private AuthenticationProvider getProvider(String providerName) {
AuthenticationProvider delegate = delegates.get(providerName);
if (delegate == null) {
logger.warnf("Provider '%s' not available on classpath", providerName);
}
return delegate;
}
private static List<AuthenticationProviderModel> getConfiguredProviderModels(RealmModel realm) {
List<AuthenticationProviderModel> configuredProviders = realm.getAuthenticationProviders();
// Use model based authentication of current realm by default
if (configuredProviders == null || configuredProviders.isEmpty()) {
configuredProviders = Collections.EMPTY_LIST;
logger.warnf("No authentication providers found");
}
return configuredProviders;
}
public static AuthenticationProviderModel getConfiguredProviderModel(RealmModel realm, String providerName) {
List<AuthenticationProviderModel> providers = getConfiguredProviderModels(realm);
for (AuthenticationProviderModel provider : providers) {
if (providerName.equals(provider.getProviderName())) {
return provider;
}
}
logger.warnf("Provider '%s' not configured in realm", providerName);
return null;
}
// Check if ID of linked AuthUser is same as expected ID from authenticationLink . It should catch the case when for example user "john" was deleted in LDAP
// and then user "john" has been created again, but it's actually different user with different ID
private void checkCorrectAuthLink(AuthenticationProvider authProvider, AuthenticationProviderModel providerModel,
AuthenticationLinkModel authLinkModel, String username) throws AuthenticationProviderException {
AuthUser authUser = authProvider.getUser(realm, providerModel.getConfig(), username);
if (authUser == null) {
throw new AuthenticationProviderException("User " + username + " not found in authentication provider " + providerModel.getProviderName());
}
String userExternalId = authUser.getId();
if (!userExternalId.equals(authLinkModel.getAuthUserId())) {
throw new AuthenticationProviderException("ID did not match! ID from provider: " + userExternalId + ", ID from authentication link: " + authLinkModel.getAuthUserId());
}
}
}
@@ -1 +0,0 @@
org.keycloak.authentication.AuthenticationSpi
@@ -1,84 +0,0 @@
package org.keycloak.authentication.model;
import java.util.Map;
import org.jboss.logging.Logger;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserCredentialModel;
import org.keycloak.models.UserModel;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.representations.idm.CredentialRepresentation;
import org.keycloak.authentication.AuthProviderStatus;
import org.keycloak.authentication.AuthUser;
import org.keycloak.authentication.AuthenticationProvider;
import org.keycloak.authentication.AuthenticationProviderException;
/**
* Authentication provider, which delegates calling of all methods to specified realm
*
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public abstract class AbstractModelAuthenticationProvider implements AuthenticationProvider {
private static final Logger logger = Logger.getLogger(AbstractModelAuthenticationProvider.class);
@Override
public AuthUser getUser(RealmModel currentRealm, Map<String, String> config, String username) throws AuthenticationProviderException {
RealmModel realm = getRealm(currentRealm, config);
UserModel user = KeycloakModelUtils.findUserByNameOrEmail(realm, username);
return user == null ? null : createAuthenticatedUserInstance(user);
}
@Override
public String registerUser(RealmModel currentRealm, Map<String, String> config, String username) throws AuthenticationProviderException {
RealmModel realm = getRealm(currentRealm, config);
UserModel user = currentRealm.addUser(username);
user.setEnabled(true);
return user.getId();
}
@Override
public AuthProviderStatus validatePassword(RealmModel currentRealm, Map<String, String> config, String username, String password) throws AuthenticationProviderException {
RealmModel realm = getRealm(currentRealm, config);
UserModel user = KeycloakModelUtils.findUserByNameOrEmail(realm, username);
boolean result = realm.validatePassword(user, password);
return result ? AuthProviderStatus.SUCCESS : AuthProviderStatus.INVALID_CREDENTIALS;
}
@Override
public boolean updateCredential(RealmModel currentRealm, Map<String, String> config, String username, String password) throws AuthenticationProviderException {
RealmModel realm = getRealm(currentRealm, config);
// Validate password policy
String error = realm.getPasswordPolicy().validate(password);
if (error != null) {
throw new AuthenticationProviderException(error);
}
UserModel user = realm.getUser(username);
if (user == null) {
logger.warnf("User '%s' doesn't exists. Skip password update", username);
return false;
}
UserCredentialModel cred = new UserCredentialModel();
cred.setType(CredentialRepresentation.PASSWORD);
cred.setValue(password);
realm.updateCredential(user, cred);
return true;
}
@Override
public void close() {
}
protected abstract RealmModel getRealm(RealmModel currentRealm, Map<String, String> config) throws AuthenticationProviderException;
protected AuthUser createAuthenticatedUserInstance(UserModel user) {
return new AuthUser(user.getId(), user.getLoginName(), getName())
.setName(user.getFirstName(), user.getLastName())
.setEmail(user.getEmail());
}
}
@@ -1,53 +0,0 @@
package org.keycloak.authentication.model;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.jboss.resteasy.spi.ResteasyProviderFactory;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
import org.keycloak.authentication.AuthProviderConstants;
import org.keycloak.authentication.AuthenticationProviderException;
import org.keycloak.provider.ProviderSession;
/**
* AbstractModelAuthenticationProvider, which delegates authentication operations to different (external) realm
*
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class ExternalModelAuthenticationProvider extends AbstractModelAuthenticationProvider {
public ExternalModelAuthenticationProvider(ProviderSession providerSession) {
}
@Override
public String getName() {
return AuthProviderConstants.PROVIDER_NAME_EXTERNAL_MODEL;
}
@Override
public List<String> getAvailableOptions() {
return Arrays.asList(AuthProviderConstants.EXTERNAL_REALM_ID);
}
@Override
public RealmModel getRealm(RealmModel currentRealm, Map<String, String> configuration) throws AuthenticationProviderException {
String realmId = configuration.get(AuthProviderConstants.EXTERNAL_REALM_ID);
if (realmId == null) {
throw new AuthenticationProviderException("Option '" + AuthProviderConstants.EXTERNAL_REALM_ID + "' not specified in configuration");
}
// TODO: This won't be needed when KeycloakSession is available from ProviderSession
KeycloakSession session = ResteasyProviderFactory.getContextData(KeycloakSession.class);
if (session == null) {
throw new AuthenticationProviderException("KeycloakSession not available");
}
RealmModel realm = session.getRealm(realmId);
if (realm == null) {
throw new AuthenticationProviderException("Realm with id '" + realmId + "' doesn't exists");
}
return realm;
}
}
@@ -1,32 +0,0 @@
package org.keycloak.authentication.model;
import org.keycloak.Config;
import org.keycloak.authentication.AuthProviderConstants;
import org.keycloak.authentication.AuthenticationProvider;
import org.keycloak.authentication.AuthenticationProviderFactory;
import org.keycloak.provider.ProviderSession;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class ExternalModelAuthenticationProviderFactory implements AuthenticationProviderFactory {
@Override
public AuthenticationProvider create(ProviderSession providerSession) {
return new ExternalModelAuthenticationProvider(providerSession);
}
@Override
public void init(Config.Scope config) {
}
@Override
public void close() {
}
@Override
public String getId() {
return AuthProviderConstants.PROVIDER_NAME_EXTERNAL_MODEL;
}
}
@@ -1,31 +0,0 @@
package org.keycloak.authentication.model;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.keycloak.models.RealmModel;
import org.keycloak.authentication.AuthProviderConstants;
/**
* AbstractModelAuthenticationProvider, which uses current realm to call operations on
*
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class ModelAuthenticationProvider extends AbstractModelAuthenticationProvider {
@Override
public String getName() {
return AuthProviderConstants.PROVIDER_NAME_MODEL;
}
@Override
public List<String> getAvailableOptions() {
return Collections.EMPTY_LIST;
}
@Override
protected RealmModel getRealm(RealmModel currentRealm, Map<String, String> config) {
return currentRealm;
}
}
@@ -1,32 +0,0 @@
package org.keycloak.authentication.model;
import org.keycloak.Config;
import org.keycloak.authentication.AuthProviderConstants;
import org.keycloak.authentication.AuthenticationProvider;
import org.keycloak.authentication.AuthenticationProviderFactory;
import org.keycloak.provider.ProviderSession;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class ModelAuthenticationProviderFactory implements AuthenticationProviderFactory {
@Override
public AuthenticationProvider create(ProviderSession providerSession) {
return new ModelAuthenticationProvider();
}
@Override
public void init(Config.Scope config) {
}
@Override
public void close() {
}
@Override
public String getId() {
return AuthProviderConstants.PROVIDER_NAME_MODEL;
}
}
@@ -1,2 +0,0 @@
org.keycloak.authentication.model.ModelAuthenticationProviderFactory
org.keycloak.authentication.model.ExternalModelAuthenticationProviderFactory
@@ -1,130 +0,0 @@
package org.keycloak.authentication.picketlink;
import org.jboss.logging.Logger;
import org.keycloak.authentication.AuthProviderConstants;
import org.keycloak.authentication.AuthProviderStatus;
import org.keycloak.authentication.AuthUser;
import org.keycloak.authentication.AuthenticationProvider;
import org.keycloak.authentication.AuthenticationProviderException;
import org.keycloak.models.RealmModel;
import org.keycloak.picketlink.IdentityManagerProvider;
import org.picketlink.idm.IdentityManagementException;
import org.picketlink.idm.IdentityManager;
import org.picketlink.idm.credential.Credentials;
import org.picketlink.idm.credential.Password;
import org.picketlink.idm.credential.UsernamePasswordCredentials;
import org.picketlink.idm.model.basic.BasicModel;
import org.picketlink.idm.model.basic.User;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* AuthenticationProvider, which delegates authentication to picketlink
*
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class PicketlinkAuthenticationProvider implements AuthenticationProvider {
private static final Logger logger = Logger.getLogger(PicketlinkAuthenticationProvider.class);
private final IdentityManagerProvider identityManagerProvider;
public PicketlinkAuthenticationProvider(IdentityManagerProvider identityManagerProvider) {
this.identityManagerProvider = identityManagerProvider;
}
@Override
public String getName() {
return AuthProviderConstants.PROVIDER_NAME_PICKETLINK;
}
@Override
public List<String> getAvailableOptions() {
return Collections.EMPTY_LIST;
}
@Override
public AuthUser getUser(RealmModel realm, Map<String, String> configuration, String username) throws AuthenticationProviderException {
IdentityManager identityManager = getIdentityManager(realm);
try {
User picketlinkUser = BasicModel.getUser(identityManager, username);
return picketlinkUser == null ? null : new AuthUser(picketlinkUser.getId(), picketlinkUser.getLoginName(), getName())
.setName(picketlinkUser.getFirstName(), picketlinkUser.getLastName())
.setEmail(picketlinkUser.getEmail())
.setProviderName(getName());
} catch (IdentityManagementException ie) {
throw convertIDMException(ie);
}
}
@Override
public String registerUser(RealmModel realm, Map<String, String> configuration, String username) throws AuthenticationProviderException {
IdentityManager identityManager = getIdentityManager(realm);
try {
User picketlinkUser = new User(username);
identityManager.add(picketlinkUser);
return picketlinkUser.getId();
} catch (IdentityManagementException ie) {
throw convertIDMException(ie);
}
}
@Override
public AuthProviderStatus validatePassword(RealmModel realm, Map<String, String> configuration, String username, String password) throws AuthenticationProviderException {
IdentityManager identityManager = getIdentityManager(realm);
try {
UsernamePasswordCredentials credential = new UsernamePasswordCredentials();
credential.setUsername(username);
credential.setPassword(new Password(password.toCharArray()));
identityManager.validateCredentials(credential);
if (credential.getStatus() == Credentials.Status.VALID) {
return AuthProviderStatus.SUCCESS;
} else {
return AuthProviderStatus.INVALID_CREDENTIALS;
}
} catch (IdentityManagementException ie) {
throw convertIDMException(ie);
}
}
@Override
public boolean updateCredential(RealmModel realm, Map<String, String> configuration, String username, String password) throws AuthenticationProviderException {
IdentityManager identityManager = getIdentityManager(realm);
try {
User picketlinkUser = BasicModel.getUser(identityManager, username);
if (picketlinkUser == null) {
logger.debugf("User '%s' doesn't exists. Skip password update", username);
return false;
}
identityManager.updateCredential(picketlinkUser, new Password(password.toCharArray()));
return true;
} catch (IdentityManagementException ie) {
throw convertIDMException(ie);
}
}
@Override
public void close() {
}
public IdentityManager getIdentityManager(RealmModel realm) throws AuthenticationProviderException {
return identityManagerProvider.getIdentityManager(realm);
}
private AuthenticationProviderException convertIDMException(IdentityManagementException ie) {
Throwable realCause = ie;
while (realCause.getCause() != null) {
realCause = realCause.getCause();
}
// Use the message from the realCause
return new AuthenticationProviderException(realCause.getMessage(), ie);
}
}
@@ -1,33 +0,0 @@
package org.keycloak.authentication.picketlink;
import org.keycloak.Config;
import org.keycloak.authentication.AuthProviderConstants;
import org.keycloak.authentication.AuthenticationProvider;
import org.keycloak.authentication.AuthenticationProviderFactory;
import org.keycloak.picketlink.IdentityManagerProvider;
import org.keycloak.provider.ProviderSession;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class PicketlinkAuthenticationProviderFactory implements AuthenticationProviderFactory {
@Override
public AuthenticationProvider create(ProviderSession providerSession) {
return new PicketlinkAuthenticationProvider(providerSession.getProvider(IdentityManagerProvider.class));
}
@Override
public void init(Config.Scope config) {
}
@Override
public void close() {
}
@Override
public String getId() {
return AuthProviderConstants.PROVIDER_NAME_PICKETLINK;
}
}
@@ -1 +0,0 @@
org.keycloak.authentication.picketlink.PicketlinkAuthenticationProviderFactory
+39
View File
@@ -0,0 +1,39 @@
<?xml version="1.0"?>
<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.0.5.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-connections-jpa</artifactId>
<name>Keycloak Connections JPA</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-model-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.entitymanager.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,26 @@
package org.keycloak.connections.jpa;
import javax.persistence.EntityManager;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class DefaultJpaConnectionProvider implements JpaConnectionProvider {
private final EntityManager em;
public DefaultJpaConnectionProvider(EntityManager em) {
this.em = em;
}
@Override
public EntityManager getEntityManager() {
return em;
}
@Override
public void close() {
em.close();
}
}
@@ -0,0 +1,101 @@
package org.keycloak.connections.jpa;
import org.hibernate.ejb.AvailableSettings;
import org.keycloak.Config;
import org.keycloak.models.KeycloakSession;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import java.util.HashMap;
import java.util.Map;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class DefaultJpaConnectionProviderFactory implements JpaConnectionProviderFactory {
private volatile EntityManagerFactory emf;
private Config.Scope config;
@Override
public JpaConnectionProvider create(KeycloakSession session) {
lazyInit();
EntityManager em = emf.createEntityManager();
em = PersistenceExceptionConverter.create(em);
session.getTransaction().enlist(new JpaKeycloakTransaction(em));
return new DefaultJpaConnectionProvider(em);
}
@Override
public void close() {
if (emf != null) {
emf.close();
}
}
@Override
public String getId() {
return "default";
}
@Override
public void init(Config.Scope config) {
this.config = config;
}
private void lazyInit() {
if (emf == null) {
synchronized (this) {
if (emf == null) {
String unitName = config.get("unitName");
Map<String, Object> properties = new HashMap<String, Object>();
// Only load config from keycloak-server.json if unitName is not specified
if (unitName == null) {
unitName = "keycloak-default";
String dataSource = config.get("dataSource");
if (dataSource != null) {
if (config.getBoolean("jta", false)) {
properties.put(AvailableSettings.JTA_DATASOURCE, dataSource);
} else {
properties.put(AvailableSettings.NON_JTA_DATASOURCE, dataSource);
}
} else {
properties.put(AvailableSettings.JDBC_URL, config.get("url"));
properties.put(AvailableSettings.JDBC_DRIVER, config.get("driver"));
String user = config.get("user");
if (user != null) {
properties.put(AvailableSettings.JDBC_USER, user);
}
String password = config.get("password");
if (password != null) {
properties.put(AvailableSettings.JDBC_PASSWORD, password);
}
}
String driverDialect = config.get("driverDialect");
if (driverDialect != null && driverDialect.length() > 0) {
properties.put("hibernate.dialect", driverDialect);
}
String databaseSchema = config.get("databaseSchema", "validate");
if (databaseSchema != null) {
properties.put("hibernate.hbm2ddl.auto", databaseSchema);
}
properties.put("hibernate.show_sql", config.getBoolean("showSql", false));
properties.put("hibernate.format_sql", config.getBoolean("formatSql", true));
}
emf = Persistence.createEntityManagerFactory(unitName, properties);
}
}
}
}
}
@@ -0,0 +1,14 @@
package org.keycloak.connections.jpa;
import org.keycloak.provider.Provider;
import javax.persistence.EntityManager;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public interface JpaConnectionProvider extends Provider {
EntityManager getEntityManager();
}
@@ -0,0 +1,9 @@
package org.keycloak.connections.jpa;
import org.keycloak.provider.ProviderFactory;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public interface JpaConnectionProviderFactory extends ProviderFactory<JpaConnectionProvider> {
}
@@ -1,4 +1,4 @@
package org.keycloak.authentication;
package org.keycloak.connections.jpa;
import org.keycloak.provider.Provider;
import org.keycloak.provider.ProviderFactory;
@@ -7,21 +7,21 @@ import org.keycloak.provider.Spi;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class AuthenticationSpi implements Spi {
public class JpaConnectionSpi implements Spi {
@Override
public String getName() {
return "authentication";
return "connectionsJpa";
}
@Override
public Class<? extends Provider> getProviderClass() {
return AuthenticationProvider.class;
return JpaConnectionProvider.class;
}
@Override
public Class<? extends ProviderFactory> getProviderFactoryClass() {
return AuthenticationProviderFactory.class;
return JpaConnectionProviderFactory.class;
}
}
@@ -0,0 +1,53 @@
package org.keycloak.connections.jpa;
import org.keycloak.models.KeycloakTransaction;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class JpaKeycloakTransaction implements KeycloakTransaction {
protected EntityManager em;
public JpaKeycloakTransaction(EntityManager em) {
this.em = em;
}
@Override
public void begin() {
em.getTransaction().begin();
}
@Override
public void commit() {
try {
em.getTransaction().commit();
} catch (PersistenceException e) {
throw PersistenceExceptionConverter.convert(e.getCause() != null ? e.getCause() : e);
}
}
@Override
public void rollback() {
em.getTransaction().rollback();
}
@Override
public void setRollbackOnly() {
em.getTransaction().setRollbackOnly();
}
@Override
public boolean getRollbackOnly() {
return em.getTransaction().getRollbackOnly();
}
@Override
public boolean isActive() {
return em.getTransaction().isActive();
}
}
@@ -0,0 +1,48 @@
package org.keycloak.connections.jpa;
import org.hibernate.exception.ConstraintViolationException;
import org.keycloak.models.ModelDuplicateException;
import org.keycloak.models.ModelException;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class PersistenceExceptionConverter implements InvocationHandler {
private EntityManager em;
public static EntityManager create(EntityManager em) {
return (EntityManager) Proxy.newProxyInstance(EntityManager.class.getClassLoader(), new Class[]{EntityManager.class}, new PersistenceExceptionConverter(em));
}
private PersistenceExceptionConverter(EntityManager em) {
this.em = em;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
try {
return method.invoke(em, args);
} catch (InvocationTargetException e) {
throw convert(e.getCause());
}
}
public static ModelException convert(Throwable t) {
if (t.getCause() != null && t.getCause() instanceof ConstraintViolationException) {
throw new ModelDuplicateException(t);
} if (t instanceof EntityExistsException) {
throw new ModelDuplicateException(t);
} else {
throw new ModelException(t);
}
}
}
@@ -0,0 +1,36 @@
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="keycloak-default" transaction-type="RESOURCE_LOCAL">
<class>org.keycloak.models.jpa.entities.ApplicationEntity</class>
<class>org.keycloak.models.jpa.entities.CredentialEntity</class>
<class>org.keycloak.models.jpa.entities.OAuthClientEntity</class>
<class>org.keycloak.models.jpa.entities.RealmEntity</class>
<class>org.keycloak.models.jpa.entities.RealmAttributeEntity</class>
<class>org.keycloak.models.jpa.entities.RequiredCredentialEntity</class>
<class>org.keycloak.models.jpa.entities.UserFederationProviderEntity</class>
<class>org.keycloak.models.jpa.entities.RoleEntity</class>
<class>org.keycloak.models.jpa.entities.SocialLinkEntity</class>
<class>org.keycloak.models.jpa.entities.UserEntity</class>
<class>org.keycloak.models.jpa.entities.UserRequiredActionEntity</class>
<class>org.keycloak.models.jpa.entities.UserAttributeEntity</class>
<class>org.keycloak.models.jpa.entities.UserRoleMappingEntity</class>
<class>org.keycloak.models.jpa.entities.ScopeMappingEntity</class>
<!-- JpaUserSessionProvider -->
<class>org.keycloak.models.sessions.jpa.entities.ClientSessionEntity</class>
<class>org.keycloak.models.sessions.jpa.entities.ClientSessionRoleEntity</class>
<class>org.keycloak.models.sessions.jpa.entities.UserSessionEntity</class>
<class>org.keycloak.models.sessions.jpa.entities.UsernameLoginFailureEntity</class>
<!-- JpaAuditProvider -->
<class>org.keycloak.events.jpa.EventEntity</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="jboss.as.jpa.managed" value="false"/>
</properties>
</persistence-unit>
</persistence>
@@ -0,0 +1 @@
org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory
@@ -0,0 +1 @@
org.keycloak.connections.jpa.JpaConnectionSpi
+37
View File
@@ -0,0 +1,37 @@
<?xml version="1.0"?>
<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.0.5.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-connections-mongo</artifactId>
<name>Keycloak Connections Mongo</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-model-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,111 @@
package org.keycloak.connections.mongo;
import com.mongodb.DB;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.jboss.logging.Logger;
import org.keycloak.Config;
import org.keycloak.connections.mongo.api.MongoStore;
import org.keycloak.connections.mongo.impl.MongoStoreImpl;
import org.keycloak.connections.mongo.impl.context.TransactionMongoStoreInvocationContext;
import org.keycloak.models.KeycloakSession;
import java.util.Collections;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class DefaultMongoConnectionFactoryProvider implements MongoConnectionProviderFactory {
// TODO Make configurable
private String[] entities = new String[]{
"org.keycloak.models.mongo.keycloak.entities.MongoRealmEntity",
"org.keycloak.models.mongo.keycloak.entities.MongoUserEntity",
"org.keycloak.models.mongo.keycloak.entities.MongoRoleEntity",
"org.keycloak.models.entities.RequiredCredentialEntity",
"org.keycloak.models.entities.CredentialEntity",
"org.keycloak.models.entities.SocialLinkEntity",
"org.keycloak.models.mongo.keycloak.entities.MongoApplicationEntity",
"org.keycloak.models.mongo.keycloak.entities.MongoOAuthClientEntity",
"org.keycloak.models.sessions.mongo.entities.MongoUsernameLoginFailureEntity",
"org.keycloak.models.sessions.mongo.entities.MongoUserSessionEntity",
"org.keycloak.models.sessions.mongo.entities.MongoClientSessionEntity",
"org.keycloak.models.entities.UserFederationProviderEntity"
};
private static final Logger logger = Logger.getLogger(DefaultMongoConnectionFactoryProvider.class);
private volatile MongoClient client;
private MongoStore mongoStore;
private DB db;
private Config.Scope config;
@Override
public MongoConnectionProvider create(KeycloakSession session) {
lazyInit();
TransactionMongoStoreInvocationContext invocationContext = new TransactionMongoStoreInvocationContext(mongoStore);
session.getTransaction().enlist(new MongoKeycloakTransaction(invocationContext));
return new DefaultMongoConnectionProvider(db, mongoStore, invocationContext);
}
@Override
public void init(Config.Scope config) {
this.config = config;
}
private void lazyInit() {
if (client == null) {
synchronized (this) {
if (client == null) {
try {
String host = config.get("host", ServerAddress.defaultHost());
int port = config.getInt("port", ServerAddress.defaultPort());
String dbName = config.get("db", "keycloak");
boolean clearOnStartup = config.getBoolean("clearOnStartup", false);
String user = config.get("user");
String password = config.get("password");
if (user != null && password != null) {
MongoCredential credential = MongoCredential.createMongoCRCredential(user, dbName, password.toCharArray());
client = new MongoClient(new ServerAddress(host, port), Collections.singletonList(credential));
} else {
client = new MongoClient(host, port);
}
this.db = client.getDB(dbName);
this.mongoStore = new MongoStoreImpl(db, clearOnStartup, getManagedEntities());
logger.infof("Initialized mongo model. host: %s, port: %d, db: %s, clearOnStartup: %b", host, port, dbName, clearOnStartup);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
}
private Class[] getManagedEntities() throws ClassNotFoundException {
Class[] entityClasses = new Class[entities.length];
for (int i = 0; i < entities.length; i++) {
entityClasses[i] = Thread.currentThread().getContextClassLoader().loadClass(entities[i]);
}
return entityClasses;
}
@Override
public void close() {
if (client != null) {
client.close();
}
}
@Override
public String getId() {
return "default";
}
}
@@ -0,0 +1,41 @@
package org.keycloak.connections.mongo;
import com.mongodb.DB;
import org.keycloak.connections.mongo.api.MongoStore;
import org.keycloak.connections.mongo.api.context.MongoStoreInvocationContext;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class DefaultMongoConnectionProvider implements MongoConnectionProvider {
private DB db;
private MongoStore mongoStore;
private MongoStoreInvocationContext invocationContext;
public DefaultMongoConnectionProvider(DB db, MongoStore mongoStore, MongoStoreInvocationContext invocationContext) {
this.db = db;
this.mongoStore = mongoStore;
this.invocationContext = invocationContext;
}
@Override
public DB getDB() {
return db;
}
@Override
public MongoStore getMongoStore() {
return mongoStore;
}
@Override
public MongoStoreInvocationContext getInvocationContext() {
return invocationContext;
}
@Override
public void close() {
}
}
@@ -0,0 +1,19 @@
package org.keycloak.connections.mongo;
import com.mongodb.DB;
import org.keycloak.connections.mongo.api.MongoStore;
import org.keycloak.connections.mongo.api.context.MongoStoreInvocationContext;
import org.keycloak.provider.Provider;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public interface MongoConnectionProvider extends Provider {
DB getDB();
MongoStore getMongoStore();
MongoStoreInvocationContext getInvocationContext();
}
@@ -0,0 +1,9 @@
package org.keycloak.connections.mongo;
import org.keycloak.provider.ProviderFactory;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public interface MongoConnectionProviderFactory extends ProviderFactory<MongoConnectionProvider> {
}
@@ -0,0 +1,27 @@
package org.keycloak.connections.mongo;
import org.keycloak.provider.Provider;
import org.keycloak.provider.ProviderFactory;
import org.keycloak.provider.Spi;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class MongoConnectionSpi implements Spi {
@Override
public String getName() {
return "connectionsMongo";
}
@Override
public Class<? extends Provider> getProviderClass() {
return MongoConnectionProvider.class;
}
@Override
public Class<? extends ProviderFactory> getProviderFactoryClass() {
return MongoConnectionProviderFactory.class;
}
}
@@ -1,9 +1,9 @@
package org.keycloak.models.mongo.keycloak.adapters;
package org.keycloak.connections.mongo;
import com.mongodb.MongoException;
import org.keycloak.connections.mongo.api.context.MongoStoreInvocationContext;
import org.keycloak.connections.mongo.impl.MongoStoreImpl;
import org.keycloak.models.KeycloakTransaction;
import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
import org.keycloak.models.mongo.impl.MongoStoreImpl;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
@@ -42,11 +42,13 @@ public class MongoKeycloakTransaction implements KeycloakTransaction {
} catch (MongoException e) {
throw MongoStoreImpl.convertException(e);
}
started = false;
}
@Override
public void rollback() {
invocationContext.rollback();
started = false;
}
@Override
@@ -1,4 +1,4 @@
package org.keycloak.models.mongo.api;
package org.keycloak.connections.mongo.api;
import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
@@ -1,4 +1,4 @@
package org.keycloak.models.mongo.api;
package org.keycloak.connections.mongo.api;
/**
* Base interface for object, which is persisted in Mongo
@@ -1,4 +1,4 @@
package org.keycloak.models.mongo.api;
package org.keycloak.connections.mongo.api;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
@@ -1,6 +1,6 @@
package org.keycloak.models.mongo.api;
package org.keycloak.connections.mongo.api;
import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
import org.keycloak.connections.mongo.api.context.MongoStoreInvocationContext;
/**
* Entity with Id
@@ -1,4 +1,4 @@
package org.keycloak.models.mongo.api;
package org.keycloak.connections.mongo.api;
import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
@@ -1,4 +1,4 @@
package org.keycloak.models.mongo.api;
package org.keycloak.connections.mongo.api;
import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
@@ -1,7 +1,7 @@
package org.keycloak.models.mongo.api;
package org.keycloak.connections.mongo.api;
import com.mongodb.DBObject;
import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
import org.keycloak.connections.mongo.api.context.MongoStoreInvocationContext;
import java.util.List;
@@ -31,6 +31,10 @@ public interface MongoStore {
<T extends MongoIdentifiableEntity> List<T> loadEntities(Class<T> type, DBObject query, MongoStoreInvocationContext context);
<T extends MongoIdentifiableEntity> List<T> loadEntities(Class<T> type, DBObject query, DBObject sort, int firstResult, int maxResults, MongoStoreInvocationContext context);
<T extends MongoIdentifiableEntity> int countEntities(Class<T> type, DBObject query, MongoStoreInvocationContext context);
boolean removeEntity(MongoIdentifiableEntity entity, MongoStoreInvocationContext context);
boolean removeEntity(Class<? extends MongoIdentifiableEntity> type, String id, MongoStoreInvocationContext context);
@@ -41,8 +45,4 @@ public interface MongoStore {
<S> boolean pullItemFromList(MongoIdentifiableEntity entity, String listPropertyName, S itemToPull, MongoStoreInvocationContext context);
/**
* Completely remove all data from DB
*/
void removeAllEntities();
}
@@ -1,7 +1,7 @@
package org.keycloak.models.mongo.api.context;
package org.keycloak.connections.mongo.api.context;
import org.keycloak.models.mongo.api.MongoIdentifiableEntity;
import org.keycloak.models.mongo.api.MongoStore;
import org.keycloak.connections.mongo.api.MongoIdentifiableEntity;
import org.keycloak.connections.mongo.api.MongoStore;
/**
* Context, which provides callback methods to be invoked by MongoStore
@@ -1,4 +1,4 @@
package org.keycloak.models.mongo.api.context;
package org.keycloak.connections.mongo.api.context;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
@@ -1,4 +1,4 @@
package org.keycloak.models.mongo.api.types;
package org.keycloak.connections.mongo.api.types;
/**
* SPI object to convert object from application type to database type and vice versa. Shouldn't be directly used by application.
@@ -1,4 +1,4 @@
package org.keycloak.models.mongo.api.types;
package org.keycloak.connections.mongo.api.types;
import java.util.List;
@@ -1,4 +1,4 @@
package org.keycloak.models.mongo.api.types;
package org.keycloak.connections.mongo.api.types;
import java.util.HashMap;
import java.util.Map;
@@ -1,6 +1,5 @@
package org.keycloak.models.mongo.impl;
package org.keycloak.connections.mongo.impl;
import org.keycloak.models.mongo.api.MongoEntity;
import org.keycloak.models.utils.reflection.Property;
import java.util.Collection;
@@ -1,4 +1,4 @@
package org.keycloak.models.mongo.impl;
package org.keycloak.connections.mongo.impl;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
@@ -8,31 +8,29 @@ import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoException;
import org.jboss.logging.Logger;
import org.keycloak.models.ModelException;
import org.keycloak.connections.mongo.api.MongoCollection;
import org.keycloak.connections.mongo.api.MongoEntity;
import org.keycloak.connections.mongo.api.MongoIdentifiableEntity;
import org.keycloak.connections.mongo.api.MongoIndex;
import org.keycloak.connections.mongo.api.MongoIndexes;
import org.keycloak.connections.mongo.api.MongoStore;
import org.keycloak.connections.mongo.api.context.MongoStoreInvocationContext;
import org.keycloak.connections.mongo.api.context.MongoTask;
import org.keycloak.connections.mongo.api.types.Mapper;
import org.keycloak.connections.mongo.api.types.MapperContext;
import org.keycloak.connections.mongo.api.types.MapperRegistry;
import org.keycloak.connections.mongo.impl.types.BasicDBListMapper;
import org.keycloak.connections.mongo.impl.types.BasicDBObjectMapper;
import org.keycloak.connections.mongo.impl.types.BasicDBObjectToMapMapper;
import org.keycloak.connections.mongo.impl.types.EnumToStringMapper;
import org.keycloak.connections.mongo.impl.types.ListMapper;
import org.keycloak.connections.mongo.impl.types.MapMapper;
import org.keycloak.connections.mongo.impl.types.MongoEntityMapper;
import org.keycloak.connections.mongo.impl.types.SimpleMapper;
import org.keycloak.connections.mongo.impl.types.StringToEnumMapper;
import org.keycloak.models.ModelDuplicateException;
import org.keycloak.models.mongo.api.MongoCollection;
import org.keycloak.models.mongo.api.MongoEntity;
import org.keycloak.models.mongo.api.MongoField;
import org.keycloak.models.mongo.api.MongoIdentifiableEntity;
import org.keycloak.models.mongo.api.MongoIndex;
import org.keycloak.models.mongo.api.MongoIndexes;
import org.keycloak.models.mongo.api.MongoStore;
import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
import org.keycloak.models.mongo.api.context.MongoTask;
import org.keycloak.models.mongo.api.types.Mapper;
import org.keycloak.models.mongo.api.types.MapperContext;
import org.keycloak.models.mongo.api.types.MapperRegistry;
import org.keycloak.models.mongo.impl.types.BasicDBListMapper;
import org.keycloak.models.mongo.impl.types.BasicDBObjectMapper;
import org.keycloak.models.mongo.impl.types.BasicDBObjectToMapMapper;
import org.keycloak.models.mongo.impl.types.EnumToStringMapper;
import org.keycloak.models.mongo.impl.types.ListMapper;
import org.keycloak.models.mongo.impl.types.MapMapper;
import org.keycloak.models.mongo.impl.types.MongoEntityMapper;
import org.keycloak.models.mongo.impl.types.SimpleMapper;
import org.keycloak.models.mongo.impl.types.StringToEnumMapper;
import org.keycloak.models.ModelException;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.models.utils.reflection.AnnotatedPropertyCriteria;
import org.keycloak.models.utils.reflection.Property;
import org.keycloak.models.utils.reflection.PropertyQueries;
@@ -41,7 +39,6 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -283,6 +280,35 @@ public class MongoStoreImpl implements MongoStore {
return convertCursor(type, cursor, context);
}
@Override
public <T extends MongoIdentifiableEntity> List<T> loadEntities(Class<T> type, DBObject query, DBObject sort, int firstResult, int maxResults, MongoStoreInvocationContext context) {
// First we should execute all pending tasks before searching DB
context.beforeDBSearch(type);
DBCollection dbCollection = getDBCollectionForType(type);
DBCursor cursor = dbCollection.find(query);
if (firstResult != -1) {
cursor.skip(firstResult);
}
if (maxResults != -1) {
cursor.limit(maxResults);
}
if (sort != null) {
cursor.sort(sort);
}
return convertCursor(type, cursor, context);
}
public <T extends MongoIdentifiableEntity> int countEntities(Class<T> type, DBObject query, MongoStoreInvocationContext context) {
context.beforeDBSearch(type);
DBCollection dbCollection = getDBCollectionForType(type);
Long count = dbCollection.count(query);
// For now, assume that int is sufficient
return count.intValue();
}
@Override
public boolean removeEntity(MongoIdentifiableEntity entity, MongoStoreInvocationContext context) {
@@ -417,13 +443,6 @@ public class MongoStoreImpl implements MongoStore {
}
}
@Override
public void removeAllEntities() {
Set<Class<?>> managedTypes = this.entityInfoCache.keySet();
Class<? extends MongoEntity>[] arrayTemplate = (Class<? extends MongoEntity>[])new Class<?>[0];
this.clearManagedCollections(managedTypes.toArray(arrayTemplate));
}
// Possibility to add user-defined mappers
public void addAppObjectConverter(Mapper<?, ?> mapper) {
mapperRegistry.addAppObjectMapper(mapper);
@@ -1,10 +1,9 @@
package org.keycloak.models.mongo.impl.context;
package org.keycloak.connections.mongo.impl.context;
import org.keycloak.models.mongo.api.MongoEntity;
import org.keycloak.models.mongo.api.MongoIdentifiableEntity;
import org.keycloak.models.mongo.api.MongoStore;
import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
import org.keycloak.models.mongo.api.context.MongoTask;
import org.keycloak.connections.mongo.api.MongoIdentifiableEntity;
import org.keycloak.connections.mongo.api.MongoStore;
import org.keycloak.connections.mongo.api.context.MongoStoreInvocationContext;
import org.keycloak.connections.mongo.api.context.MongoTask;
/**
* Context, which is not doing any postponing of tasks and does not cache anything
@@ -1,4 +1,9 @@
package org.keycloak.models.mongo.impl.context;
package org.keycloak.connections.mongo.impl.context;
import org.keycloak.connections.mongo.api.MongoIdentifiableEntity;
import org.keycloak.connections.mongo.api.MongoStore;
import org.keycloak.connections.mongo.api.context.MongoStoreInvocationContext;
import org.keycloak.connections.mongo.api.context.MongoTask;
import java.util.HashMap;
import java.util.HashSet;
@@ -6,11 +11,6 @@ import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import org.keycloak.models.mongo.api.MongoIdentifiableEntity;
import org.keycloak.models.mongo.api.MongoStore;
import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
import org.keycloak.models.mongo.api.context.MongoTask;
/**
* Invocation context, which has some very basic support for transactions, and is able to cache loaded objects.
* It always execute all pending update tasks before start searching for other objects
@@ -1,9 +1,9 @@
package org.keycloak.models.mongo.impl.types;
package org.keycloak.connections.mongo.impl.types;
import com.mongodb.BasicDBList;
import org.keycloak.models.mongo.api.types.Mapper;
import org.keycloak.models.mongo.api.types.MapperContext;
import org.keycloak.models.mongo.api.types.MapperRegistry;
import org.keycloak.connections.mongo.api.types.Mapper;
import org.keycloak.connections.mongo.api.types.MapperContext;
import org.keycloak.connections.mongo.api.types.MapperRegistry;
import java.util.ArrayList;
import java.util.List;
@@ -1,22 +1,21 @@
package org.keycloak.models.mongo.impl.types;
package org.keycloak.connections.mongo.impl.types;
import com.mongodb.BasicDBObject;
import org.jboss.logging.Logger;
import org.keycloak.connections.mongo.api.MongoIdentifiableEntity;
import org.keycloak.connections.mongo.api.types.Mapper;
import org.keycloak.connections.mongo.api.types.MapperContext;
import org.keycloak.connections.mongo.api.types.MapperRegistry;
import org.keycloak.connections.mongo.impl.EntityInfo;
import org.keycloak.connections.mongo.impl.MongoStoreImpl;
import org.keycloak.models.utils.reflection.Property;
import org.keycloak.models.utils.reflection.Types;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import com.mongodb.BasicDBObject;
import org.jboss.logging.Logger;
import org.keycloak.models.mongo.api.MongoEntity;
import org.keycloak.models.mongo.api.MongoIdentifiableEntity;
import org.keycloak.models.mongo.api.types.Mapper;
import org.keycloak.models.mongo.api.types.MapperContext;
import org.keycloak.models.mongo.api.types.MapperRegistry;
import org.keycloak.models.mongo.impl.MongoStoreImpl;
import org.keycloak.models.mongo.impl.EntityInfo;
import org.keycloak.models.utils.reflection.Property;
import org.keycloak.models.utils.reflection.Types;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
@@ -1,12 +1,12 @@
package org.keycloak.models.mongo.impl.types;
package org.keycloak.connections.mongo.impl.types;
import com.mongodb.BasicDBObject;
import org.keycloak.connections.mongo.api.types.Mapper;
import org.keycloak.connections.mongo.api.types.MapperContext;
import java.util.HashMap;
import java.util.Map;
import com.mongodb.BasicDBObject;
import org.keycloak.models.mongo.api.types.Mapper;
import org.keycloak.models.mongo.api.types.MapperContext;
/**
* For now, there is support just for convert to Map<String, String>
*
@@ -1,7 +1,7 @@
package org.keycloak.models.mongo.impl.types;
package org.keycloak.connections.mongo.impl.types;
import org.keycloak.models.mongo.api.types.Mapper;
import org.keycloak.models.mongo.api.types.MapperContext;
import org.keycloak.connections.mongo.api.types.Mapper;
import org.keycloak.connections.mongo.api.types.MapperContext;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
@@ -1,9 +1,9 @@
package org.keycloak.models.mongo.impl.types;
package org.keycloak.connections.mongo.impl.types;
import com.mongodb.BasicDBList;
import org.keycloak.models.mongo.api.types.Mapper;
import org.keycloak.models.mongo.api.types.MapperContext;
import org.keycloak.models.mongo.api.types.MapperRegistry;
import org.keycloak.connections.mongo.api.types.Mapper;
import org.keycloak.connections.mongo.api.types.MapperContext;
import org.keycloak.connections.mongo.api.types.MapperRegistry;
import java.util.List;
@@ -1,12 +1,12 @@
package org.keycloak.models.mongo.impl.types;
package org.keycloak.connections.mongo.impl.types;
import com.mongodb.BasicDBObject;
import org.keycloak.connections.mongo.api.types.Mapper;
import org.keycloak.connections.mongo.api.types.MapperContext;
import java.util.Map;
import java.util.Set;
import com.mongodb.BasicDBObject;
import org.keycloak.models.mongo.api.types.Mapper;
import org.keycloak.models.mongo.api.types.MapperContext;
/**
* For now, we support just convert from Map<String, String>
*
@@ -1,11 +1,12 @@
package org.keycloak.models.mongo.impl.types;
package org.keycloak.connections.mongo.impl.types;
import com.mongodb.BasicDBObject;
import org.keycloak.models.mongo.api.types.Mapper;
import org.keycloak.models.mongo.api.types.MapperContext;
import org.keycloak.models.mongo.api.types.MapperRegistry;
import org.keycloak.models.mongo.impl.MongoStoreImpl;
import org.keycloak.models.mongo.impl.EntityInfo;
import org.keycloak.connections.mongo.api.MongoIdentifiableEntity;
import org.keycloak.connections.mongo.api.types.Mapper;
import org.keycloak.connections.mongo.api.types.MapperContext;
import org.keycloak.connections.mongo.api.types.MapperRegistry;
import org.keycloak.connections.mongo.impl.EntityInfo;
import org.keycloak.connections.mongo.impl.MongoStoreImpl;
import org.keycloak.models.utils.reflection.Property;
import java.util.Collection;
@@ -38,7 +39,7 @@ public class MongoEntityMapper<T> implements Mapper<T, BasicDBObject> {
String propName = property.getName();
// Ignore "id" property
if (!"id".equals(propName)) {
if (!"id".equals(propName) || !(applicationObject instanceof MongoIdentifiableEntity)) {
Object propValue = property.getValue(applicationObject);
if (propValue != null) {
Object dbValue = propValue == null ? null : mapperRegistry.convertApplicationObjectToDBObject(propValue, Object.class);
@@ -1,7 +1,7 @@
package org.keycloak.models.mongo.impl.types;
package org.keycloak.connections.mongo.impl.types;
import org.keycloak.models.mongo.api.types.Mapper;
import org.keycloak.models.mongo.api.types.MapperContext;
import org.keycloak.connections.mongo.api.types.Mapper;
import org.keycloak.connections.mongo.api.types.MapperContext;
/**
* Just returns input
@@ -1,7 +1,7 @@
package org.keycloak.models.mongo.impl.types;
package org.keycloak.connections.mongo.impl.types;
import org.keycloak.models.mongo.api.types.Mapper;
import org.keycloak.models.mongo.api.types.MapperContext;
import org.keycloak.connections.mongo.api.types.Mapper;
import org.keycloak.connections.mongo.api.types.MapperContext;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
@@ -0,0 +1 @@
org.keycloak.connections.mongo.DefaultMongoConnectionFactoryProvider
@@ -0,0 +1 @@
org.keycloak.connections.mongo.MongoConnectionSpi
+31
View File
@@ -0,0 +1,31 @@
<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.0.5.Final</version>
</parent>
<name>Connections Parent</name>
<description/>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-connections-pom</artifactId>
<packaging>pom</packaging>
<modules>
<module>jpa</module>
<module>mongo</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.0-beta-1</version>
<version>1.0.5.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
+11 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.0-beta-1</version>
<version>1.0.5.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -13,6 +13,10 @@
<name>Keycloak Core</name>
<description/>
<properties>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
</properties>
<dependencies>
<dependency>
<groupId>org.bouncycastle</groupId>
@@ -41,6 +45,12 @@
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -19,6 +19,7 @@ public class AbstractOAuthClient {
protected String authUrl;
protected String codeUrl;
protected String refreshUrl;
protected boolean relativeUrls;
protected String scope;
protected String stateCookieName = OAUTH_TOKEN_REQUEST_STATE;
protected String stateCookiePath;
@@ -100,6 +101,14 @@ public class AbstractOAuthClient {
this.publicClient = publicClient;
}
public boolean isRelativeUrls() {
return relativeUrls;
}
public void setRelativeUrls(boolean relativeUrls) {
this.relativeUrls = relativeUrls;
}
protected String stripOauthParametersFromRedirect(String uri) {
KeycloakUriBuilder builder = KeycloakUriBuilder.fromUri(uri)
.replaceQueryParam(OAuth2Constants.CODE, null)
@@ -1,4 +1,4 @@
package org.keycloak.services;
package org.keycloak;
/**
* Information about the client connection
+6 -1
View File
@@ -16,7 +16,12 @@ public class Config {
}
public static String getProvider(String spi) {
return configProvider.getProvider(spi);
String provider = configProvider.getProvider(spi);
if (provider == null || provider.trim().equals("")) {
return null;
} else {
return provider;
}
}
public static Scope scope(String... scope) {
@@ -17,7 +17,12 @@ public class RSATokenVerifier {
}
public static AccessToken verifyToken(String tokenString, PublicKey realmKey, String realm, boolean checkActive) throws VerificationException {
JWSInput input = new JWSInput(tokenString);
JWSInput input = null;
try {
input = new JWSInput(tokenString);
} catch (Exception e) {
throw new VerificationException("Couldn't parse token", e);
}
if (!isPublicKeyValid(input, realmKey)) throw new VerificationException("Invalid token signature.");
AccessToken token;
+46
View File
@@ -0,0 +1,46 @@
package org.keycloak;
import org.codehaus.jackson.annotate.JsonProperty;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class Version {
public static String VERSION;
public static String BUILD_TIME;
public static final String UNKNOWN = "UNKNOWN";
public static final Version SINGLETON;
private final String version = VERSION;
private final String buildTime = BUILD_TIME;
static {
Properties props = new Properties();
InputStream is = Version.class.getResourceAsStream("/keycloak-version.properties");
try {
props.load(is);
VERSION = props.getProperty("version");
BUILD_TIME = props.getProperty("build-time");
} catch (IOException e) {
VERSION=UNKNOWN;
BUILD_TIME=UNKNOWN;
}
SINGLETON = new Version();
}
@JsonProperty("version")
public String getVersion() {
return version;
}
@JsonProperty("build-time")
public String getBuildTime() {
return buildTime;
}
}
@@ -8,6 +8,7 @@ public interface AdapterConstants {
// URL endpoints
public static final String K_LOGOUT = "k_logout";
public static final String K_VERSION = "k_version";
public static final String K_PUSH_NOT_BEFORE = "k_push_not_before";
public static final String K_GET_USER_STATS = "k_get_user_stats";
public static final String K_GET_SESSION_STATS = "k_get_session_stats";
@@ -0,0 +1,43 @@
package org.keycloak.enums;
import org.keycloak.ClientConnection;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public enum SslRequired {
ALL,
EXTERNAL,
NONE;
public boolean isRequired(ClientConnection connection) {
return isRequired(connection.getRemoteAddr());
}
public boolean isRequired(String address) {
switch (this) {
case ALL:
return true;
case NONE:
return false;
case EXTERNAL:
return !isLocal(address);
default:
return true;
}
}
private boolean isLocal(String remoteAddress) {
try {
InetAddress inetAddress = InetAddress.getByName(remoteAddress);
return inetAddress.isAnyLocalAddress() || inetAddress.isLoopbackAddress() || inetAddress.isSiteLocalAddress();
} catch (UnknownHostException e) {
return false;
}
}
}
@@ -1,20 +0,0 @@
package org.keycloak.provider;
import java.util.Set;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public interface ProviderSession {
<T extends Provider> T getProvider(Class<T> clazz);
<T extends Provider> T getProvider(Class<T> clazz, String id);
<T extends Provider> Set<String> listProviderIds(Class<T> clazz);
<T extends Provider> Set<T> getAllProviders(Class<T> clazz);
void close();
}
@@ -1,14 +0,0 @@
package org.keycloak.provider;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public interface ProviderSessionFactory {
ProviderSession createSession();
void close();
void init();
}
@@ -0,0 +1,47 @@
package org.keycloak.representations;
import org.keycloak.util.Time;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class PasswordToken {
private String realm;
private String user;
private int timestamp;
public PasswordToken() {
}
public PasswordToken(String realm, String user) {
this.realm = realm;
this.user = user;
this.timestamp = Time.currentTime();
}
public String getRealm() {
return realm;
}
public void setRealm(String realm) {
this.realm = realm;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public int getTimestamp() {
return timestamp;
}
public void setTimestamp(int timestamp) {
this.timestamp = timestamp;
}
}
@@ -9,7 +9,7 @@ import org.codehaus.jackson.annotate.JsonPropertyOrder;
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
@JsonPropertyOrder({"realm", "realm-public-key", "auth-server-url", "ssl-not-required",
@JsonPropertyOrder({"realm", "realm-public-key", "auth-server-url", "ssl-required",
"resource", "credentials",
"use-resource-role-mappings",
"enable-cors", "cors-max-age", "cors-allowed-methods",
@@ -12,7 +12,7 @@ import java.util.Map;
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
@JsonPropertyOrder({"realm", "realm-public-key", "auth-server-url", "ssl-not-required",
@JsonPropertyOrder({"realm", "realm-public-key", "auth-server-url", "ssl-required",
"resource", "public-client", "credentials",
"use-resource-role-mappings",
"enable-cors", "cors-max-age", "cors-allowed-methods",
@@ -9,7 +9,7 @@ import org.codehaus.jackson.annotate.JsonPropertyOrder;
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
@JsonPropertyOrder({"realm", "realm-public-key", "auth-server-url", "ssl-not-required"})
@JsonPropertyOrder({"realm", "realm-public-key", "auth-server-url", "ssl-required"})
public class BaseRealmConfig {
@JsonProperty("realm")
protected String realm;
@@ -17,15 +17,15 @@ public class BaseRealmConfig {
protected String realmKey;
@JsonProperty("auth-server-url")
protected String authServerUrl;
@JsonProperty("ssl-not-required")
protected boolean sslNotRequired;
@JsonProperty("ssl-required")
protected String sslRequired;
public boolean isSslNotRequired() {
return sslNotRequired;
public String getSslRequired() {
return sslRequired;
}
public void setSslNotRequired(boolean sslNotRequired) {
this.sslNotRequired = sslNotRequired;
public void setSslRequired(String sslRequired) {
this.sslRequired = sslRequired;
}
public String getRealm() {
@@ -21,6 +21,7 @@ public class ApplicationRepresentation {
protected Integer notBefore;
protected Boolean bearerOnly;
protected Boolean publicClient;
protected Boolean fullScopeAllowed;
public String getId() {
@@ -134,4 +135,12 @@ public class ApplicationRepresentation {
public void setPublicClient(Boolean publicClient) {
this.publicClient = publicClient;
}
public Boolean isFullScopeAllowed() {
return fullScopeAllowed;
}
public void setFullScopeAllowed(Boolean fullScopeAllowed) {
this.fullScopeAllowed = fullScopeAllowed;
}
}
@@ -1,26 +0,0 @@
package org.keycloak.representations.idm;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class AuthenticationLinkRepresentation {
private String authProvider;
private String authUserId;
public String getAuthProvider() {
return authProvider;
}
public void setAuthProvider(String authProvider) {
this.authProvider = authProvider;
}
public String getAuthUserId() {
return authUserId;
}
public void setAuthUserId(String authUserId) {
this.authUserId = authUserId;
}
}
@@ -1,37 +0,0 @@
package org.keycloak.representations.idm;
import java.util.Map;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class AuthenticationProviderRepresentation {
private String providerName;
private boolean passwordUpdateSupported = true;
private Map<String, String> config;
public String getProviderName() {
return providerName;
}
public void setProviderName(String providerName) {
this.providerName = providerName;
}
public boolean isPasswordUpdateSupported() {
return passwordUpdateSupported;
}
public void setPasswordUpdateSupported(boolean passwordUpdateSupported) {
this.passwordUpdateSupported = passwordUpdateSupported;
}
public Map<String, String> getConfig() {
return config;
}
public void setConfig(Map<String, String> config) {
this.config = config;
}
}
@@ -95,4 +95,40 @@ public class ClaimRepresentation {
public void setPhone(boolean phone) {
this.phone = phone;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ClaimRepresentation that = (ClaimRepresentation) o;
if (address != that.address) return false;
if (email != that.email) return false;
if (gender != that.gender) return false;
if (locale != that.locale) return false;
if (name != that.name) return false;
if (phone != that.phone) return false;
if (picture != that.picture) return false;
if (profile != that.profile) return false;
if (username != that.username) return false;
if (website != that.website) return false;
return true;
}
@Override
public int hashCode() {
int result = (name ? 1 : 0);
result = 31 * result + (username ? 1 : 0);
result = 31 * result + (profile ? 1 : 0);
result = 31 * result + (picture ? 1 : 0);
result = 31 * result + (website ? 1 : 0);
result = 31 * result + (email ? 1 : 0);
result = 31 * result + (gender ? 1 : 0);
result = 31 * result + (locale ? 1 : 0);
result = 31 * result + (address ? 1 : 0);
result = 31 * result + (phone ? 1 : 0);
return result;
}
}
@@ -7,13 +7,23 @@ package org.keycloak.representations.idm;
public class CredentialRepresentation {
public static final String SECRET = "secret";
public static final String PASSWORD = "password";
public static final String PASSWORD_TOKEN = "password-token";
public static final String TOTP = "totp";
public static final String CLIENT_CERT = "cert";
protected String type;
protected String value;
protected String device;
// Plain-text value of credential (used for example during import from manually created JSON file)
protected String value;
// Value stored in DB (used for example during export/import)
protected String hashedSaltedValue;
protected String salt;
protected Integer hashIterations;
// only used when updating a credential. Might set required action
protected boolean temporary;
public String getType() {
return type;
}
@@ -37,4 +47,36 @@ public class CredentialRepresentation {
public void setDevice(String device) {
this.device = device;
}
public String getHashedSaltedValue() {
return hashedSaltedValue;
}
public void setHashedSaltedValue(String hashedSaltedValue) {
this.hashedSaltedValue = hashedSaltedValue;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public Integer getHashIterations() {
return hashIterations;
}
public void setHashIterations(Integer hashIterations) {
this.hashIterations = hashIterations;
}
public boolean isTemporary() {
return temporary;
}
public void setTemporary(boolean temporary) {
this.temporary = temporary;
}
}
@@ -9,7 +9,6 @@ import java.util.List;
public class OAuthClientRepresentation {
protected String id;
protected String name;
protected String baseUrl;
protected List<String> redirectUris;
protected List<String> webOrigins;
protected Boolean enabled;
@@ -18,6 +17,7 @@ public class OAuthClientRepresentation {
protected Integer notBefore;
protected Boolean publicClient;
protected Boolean directGrantsOnly;
protected Boolean fullScopeAllowed;
public String getId() {
@@ -44,14 +44,6 @@ public class OAuthClientRepresentation {
this.enabled = enabled;
}
public String getBaseUrl() {
return baseUrl;
}
public void setBaseUrl(String baseUrl) {
this.baseUrl = baseUrl;
}
public List<String> getRedirectUris() {
return redirectUris;
}
@@ -107,4 +99,13 @@ public class OAuthClientRepresentation {
public void setDirectGrantsOnly(Boolean directGrantsOnly) {
this.directGrantsOnly = directGrantsOnly;
}
public Boolean isFullScopeAllowed() {
return fullScopeAllowed;
}
public void setFullScopeAllowed(Boolean fullScopeAllowed) {
this.fullScopeAllowed = fullScopeAllowed;
}
}
@@ -1,37 +0,0 @@
package org.keycloak.representations.idm;
import java.util.List;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class RealmAuditRepresentation {
protected boolean auditEnabled;
protected Long auditExpiration;
protected List<String> auditListeners;
public boolean isAuditEnabled() {
return auditEnabled;
}
public void setAuditEnabled(boolean auditEnabled) {
this.auditEnabled = auditEnabled;
}
public Long getAuditExpiration() {
return auditExpiration;
}
public void setAuditExpiration(Long auditExpiration) {
this.auditExpiration = auditExpiration;
}
public List<String> getAuditListeners() {
return auditListeners;
}
public void setAuditListeners(List<String> auditListeners) {
this.auditListeners = auditListeners;
}
}
@@ -0,0 +1,37 @@
package org.keycloak.representations.idm;
import java.util.List;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class RealmEventsConfigRepresentation {
protected boolean eventsEnabled;
protected Long eventsExpiration;
protected List<String> eventsListeners;
public boolean isEventsEnabled() {
return eventsEnabled;
}
public void setEventsEnabled(boolean eventsEnabled) {
this.eventsEnabled = eventsEnabled;
}
public Long getEventsExpiration() {
return eventsExpiration;
}
public void setEventsExpiration(Long eventsExpiration) {
this.eventsExpiration = eventsExpiration;
}
public List<String> getEventsListeners() {
return eventsListeners;
}
public void setEventsListeners(List<String> eventsListeners) {
this.eventsListeners = eventsListeners;
}
}
@@ -19,7 +19,7 @@ public class RealmRepresentation {
protected Integer accessCodeLifespan;
protected Integer accessCodeLifespanUserAction;
protected Boolean enabled;
protected Boolean sslNotRequired;
protected String sslRequired;
protected Boolean passwordCredentialGrantAllowed;
protected Boolean registrationAllowed;
protected Boolean rememberMe;
@@ -27,6 +27,10 @@ public class RealmRepresentation {
protected Boolean resetPasswordAllowed;
protected Boolean social;
protected Boolean updateProfileOnInitialSocialLogin;
protected Boolean userCacheEnabled;
protected Boolean realmCacheEnabled;
//--- brute force settings
protected Boolean bruteForceProtected;
protected Integer maxFailureWaitSeconds;
@@ -44,24 +48,21 @@ public class RealmRepresentation {
protected Set<String> requiredCredentials;
protected String passwordPolicy;
protected List<UserRepresentation> users;
protected List<UserRoleMappingRepresentation> roleMappings;
protected List<ScopeMappingRepresentation> scopeMappings;
protected Map<String, List<UserRoleMappingRepresentation>> applicationRoleMappings;
protected Map<String, List<ScopeMappingRepresentation>> applicationScopeMappings;
protected List<SocialMappingRepresentation> socialMappings;
protected List<ApplicationRepresentation> applications;
protected List<OAuthClientRepresentation> oauthClients;
protected Map<String, String> browserSecurityHeaders;
protected Map<String, String> socialProviders;
protected Map<String, String> smtpServer;
protected Map<String, String> ldapServer;
protected List<AuthenticationProviderRepresentation> authenticationProviders;
protected List<UserFederationProviderRepresentation> userFederationProviders;
protected String loginTheme;
protected String accountTheme;
protected String adminTheme;
protected String emailTheme;
protected boolean auditEnabled;
protected long auditExpiration;
protected List<String> auditListeners;
protected boolean eventsEnabled;
protected long eventsExpiration;
protected List<String> eventsListeners;
public String getId() {
return id;
@@ -119,12 +120,12 @@ public class RealmRepresentation {
this.enabled = enabled;
}
public Boolean isSslNotRequired() {
return sslNotRequired;
public String getSslRequired() {
return sslRequired;
}
public void setSslNotRequired(Boolean sslNotRequired) {
this.sslNotRequired = sslNotRequired;
public void setSslRequired(String sslRequired) {
this.sslRequired = sslRequired;
}
public Integer getAccessTokenLifespan() {
@@ -151,18 +152,6 @@ public class RealmRepresentation {
this.ssoSessionMaxLifespan = ssoSessionMaxLifespan;
}
public List<UserRoleMappingRepresentation> getRoleMappings() {
return roleMappings;
}
public UserRoleMappingRepresentation roleMapping(String username) {
UserRoleMappingRepresentation mapping = new UserRoleMappingRepresentation();
mapping.setUsername(username);
if (roleMappings == null) roleMappings = new ArrayList<UserRoleMappingRepresentation>();
roleMappings.add(mapping);
return mapping;
}
public List<ScopeMappingRepresentation> getScopeMappings() {
return scopeMappings;
}
@@ -175,18 +164,6 @@ public class RealmRepresentation {
return mapping;
}
public List<SocialMappingRepresentation> getSocialMappings() {
return socialMappings;
}
public SocialMappingRepresentation socialMapping(String username) {
SocialMappingRepresentation mapping = new SocialMappingRepresentation();
mapping.setUsername(username);
if (socialMappings == null) socialMappings = new ArrayList<SocialMappingRepresentation>();
socialMappings.add(mapping);
return mapping;
}
public Set<String> getRequiredCredentials() {
return requiredCredentials;
}
@@ -267,6 +244,22 @@ public class RealmRepresentation {
this.rememberMe = rememberMe;
}
public Boolean isRealmCacheEnabled() {
return realmCacheEnabled;
}
public void setRealmCacheEnabled(Boolean realmCacheEnabled) {
this.realmCacheEnabled = realmCacheEnabled;
}
public Boolean isUserCacheEnabled() {
return userCacheEnabled;
}
public void setUserCacheEnabled(Boolean userCacheEnabled) {
this.userCacheEnabled = userCacheEnabled;
}
public Boolean isVerifyEmail() {
return verifyEmail;
}
@@ -299,6 +292,14 @@ public class RealmRepresentation {
this.updateProfileOnInitialSocialLogin = updateProfileOnInitialSocialLogin;
}
public Map<String, String> getBrowserSecurityHeaders() {
return browserSecurityHeaders;
}
public void setBrowserSecurityHeaders(Map<String, String> browserSecurityHeaders) {
this.browserSecurityHeaders = browserSecurityHeaders;
}
public Map<String, String> getSocialProviders() {
return socialProviders;
}
@@ -315,22 +316,6 @@ public class RealmRepresentation {
this.smtpServer = smtpServer;
}
public Map<String, String> getLdapServer() {
return ldapServer;
}
public void setLdapServer(Map<String, String> ldapServer) {
this.ldapServer = ldapServer;
}
public List<AuthenticationProviderRepresentation> getAuthenticationProviders() {
return authenticationProviders;
}
public void setAuthenticationProviders(List<AuthenticationProviderRepresentation> authenticationProviders) {
this.authenticationProviders = authenticationProviders;
}
public List<OAuthClientRepresentation> getOauthClients() {
return oauthClients;
}
@@ -339,14 +324,6 @@ public class RealmRepresentation {
this.oauthClients = oauthClients;
}
public Map<String, List<UserRoleMappingRepresentation>> getApplicationRoleMappings() {
return applicationRoleMappings;
}
public void setApplicationRoleMappings(Map<String, List<UserRoleMappingRepresentation>> applicationRoleMappings) {
this.applicationRoleMappings = applicationRoleMappings;
}
public Map<String, List<ScopeMappingRepresentation>> getApplicationScopeMappings() {
return applicationScopeMappings;
}
@@ -458,4 +435,36 @@ public class RealmRepresentation {
public void setFailureFactor(Integer failureFactor) {
this.failureFactor = failureFactor;
}
public boolean isEventsEnabled() {
return eventsEnabled;
}
public void setEventsEnabled(boolean eventsEnabled) {
this.eventsEnabled = eventsEnabled;
}
public long getEventsExpiration() {
return eventsExpiration;
}
public void setEventsExpiration(long eventsExpiration) {
this.eventsExpiration = eventsExpiration;
}
public List<String> getEventsListeners() {
return eventsListeners;
}
public void setEventsListeners(List<String> eventsListeners) {
this.eventsListeners = eventsListeners;
}
public List<UserFederationProviderRepresentation> getUserFederationProviders() {
return userFederationProviders;
}
public void setUserFederationProviders(List<UserFederationProviderRepresentation> userFederationProviders) {
this.userFederationProviders = userFederationProviders;
}
}
@@ -1,44 +0,0 @@
package org.keycloak.representations.idm;
import java.util.ArrayList;
import java.util.List;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class SocialMappingRepresentation {
protected String self; // link
protected String username;
protected List<SocialLinkRepresentation> socialLinks;
public String getSelf() {
return self;
}
public void setSelf(String self) {
this.self = self;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public List<SocialLinkRepresentation> getSocialLinks() {
return socialLinks;
}
public SocialLinkRepresentation socialLink(String socialProvider, String socialUserId, String socialUsername) {
SocialLinkRepresentation link = new SocialLinkRepresentation();
link.setSocialProvider(socialProvider);
link.setSocialUserId(socialUserId);
link.setSocialUsername(socialUsername);
if (socialLinks == null) socialLinks = new ArrayList<SocialLinkRepresentation>();
socialLinks.add(link);
return link;
}
}
Loaded 100 of 1120 files, more files were not shown because too many files have changed in this diff. Show more