Compare commits

..
970 Commits
Author SHA1 Message Date
keycloak-bot 5a2bff61eb Set version to 1.7.0.Final 2015-12-08 10:20:11 +00:00
Stian Thorgersen 0acd8315a9 Merge pull request #1929 from stianst/1.7.x-add-usr
KEYCLOAK-2176 Add default roles and actions to users created with add…
2015-12-03 13:30:37 +01:00
Stian Thorgersen 55068deadb KEYCLOAK-2176 Add default roles and actions to users created with add-user script 2015-12-03 11:46:41 +01:00
Stian Thorgersen 84c609b41c Merge pull request #1927 from stianst/1.7.x
KEYCLOAK-2099 fixup: Rename keycloak-wf9-subsystem directory to
2015-12-03 11:44:27 +01:00
Peter Palaga 27b824c9d7 KEYCLOAK-2099 fixup: Rename keycloak-wf9-subsystem directory to
keycloak-wildfly-subsystem to match the WF module it contains
2015-12-03 10:54:23 +01:00
Stian Thorgersen f44fe9787a Merge pull request #1920 from stianst/1.7.x
Cache fixes
2015-12-03 10:53:26 +01:00
Stian Thorgersen 9e2ae72fb8 KEYCLOAK-2192
Class serialization issues when Realm and User caches are in ASYNC mode
2015-12-03 08:23:46 +01:00
Stian Thorgersen 4d327e47eb Ported AdminApiTest to use admin client 2015-12-03 08:22:42 +01:00
Stian Thorgersen fcbdcd075c KEYCLOAK-2179 Cache fixes 2015-12-03 08:22:18 +01:00
Marek Posolda a5fa4ee868 Merge pull request #1921 from mposolda/1.7.x
Minor fixes in kerberos example
2015-12-02 12:12:50 +01:00
mposolda 4a5a1ca627 Minor fixes in kerberos example 2015-12-02 11:30:16 +01:00
Stian Thorgersen a06c428ea8 KEYCLOAK-1813 KEYCLOAK-2182 Fixes enable/disable cache 2015-12-02 11:23:21 +01:00
Stian Thorgersen 71839eb05b KEYCLOAK-2179
Realm and user cache is invalidated when added to other nodes
2015-12-02 10:57:44 +01:00
Marek Posolda 70833745e9 Merge pull request #1917 from mposolda/1.7.x
Fix typos
2015-12-02 10:25:41 +01:00
mposolda e5ccf1ffbe Fix typos 2015-12-02 08:53:34 +01:00
Stian Thorgersen 80c234ba1c Version bump 2015-12-01 19:56:56 +01:00
Marek Posolda a388782f9b Merge pull request #1916 from mposolda/master
KEYCLOAK-2172 Added migration docs
2015-12-01 17:03:15 +01:00
mposolda 352ea30d20 KEYCLOAK-2172 Added migration docs 2015-12-01 17:02:31 +01:00
Marek Posolda 6e0444e17b Merge pull request #1915 from mposolda/master
KEYCLOAK-2172 Make Identity broker User Attribute mappers compatible …
2015-12-01 16:45:47 +01:00
Stian Thorgersen b3f0dc7399 Merge pull request #1914 from stianst/KEYCLOAK-2176
KEYCLOAK-2176
2015-12-01 16:37:56 +01:00
mposolda ad34d63cb3 KEYCLOAK-2172 Make Identity broker User Attribute mappers compatible with First Broker Login flow 2015-12-01 15:48:25 +01:00
Stian Thorgersen 703720fa43 Merge pull request #1912 from stianst/KEYCLOAK-2173
KEYCLOAK-2173 No such method on Infinispan on EAP6
2015-12-01 15:19:16 +01:00
Stian Thorgersen e01c789a93 KEYCLOAK-2176
User added by add-user script doesn't have access to account management
2015-12-01 15:14:40 +01:00
Stian Thorgersen 8064c88e3c Merge pull request #1913 from stianst/KEYCLOAK-2175
KEYCLOAK-2175
2015-12-01 14:41:55 +01:00
Stian Thorgersen b06e747d28 Merge pull request #1911 from stianst/KEYCLOAK-2174
KEYCLOAK-2174 javax/mail not found for DefaultEmailSenderProviderFactory
2015-12-01 14:33:28 +01:00
Stian Thorgersen f9b89df326 KEYCLOAK-2175
WildFly server overlay includes aesh/main as well as aesh/0.65
2015-12-01 14:32:05 +01:00
Stian Thorgersen 778a96c9e4 KEYCLOAK-2173 No such method on Infinispan on EAP6 2015-12-01 13:54:17 +01:00
Stian Thorgersen f6f6b6a258 KEYCLOAK-2174 javax/mail not found for DefaultEmailSenderProviderFactory 2015-12-01 13:49:22 +01:00
Marek Posolda 9d5356a001 Merge pull request #1910 from mposolda/master
KEYCLOAK-2149 Fix possible NPE during migration
2015-12-01 12:35:27 +01:00
mposolda 32fb604c88 KEYCLOAK-2149 Fix possible NPE during migration 2015-12-01 11:41:32 +01:00
Marek Posolda b3ea8f3add Merge pull request #1909 from mposolda/master
KEYCLOAK-2171 Fix broker test with MySQL and Sybase
2015-12-01 10:04:57 +01:00
mposolda 382161c425 KEYCLOAK-2171 Fix broker test with MySQL and Sybase 2015-12-01 09:20:18 +01:00
Marek Posolda ec527da868 Merge pull request #1908 from mposolda/master
KEYCLOAK-1129 Implicit flow docs
2015-12-01 00:00:40 +01:00
mposolda 0038c1ce9a KEYCLOAK-1129 Implicit flow docs 2015-11-30 23:59:09 +01:00
Marek Posolda d8fb0f1540 Merge pull request #1906 from mposolda/master
KEYCLOAK-2167 EmailAsUsername not reflected during registration throu…
2015-11-30 23:45:41 +01:00
Bill Burke 866c11b25b Merge pull request #1907 from patriot1burke/master
KEYCLOAK-2059
2015-11-30 17:42:35 -05:00
Bill Burke 64f5d032ed KEYCLOAK-2059 2015-11-30 17:40:35 -05:00
mposolda 635310123e KEYCLOAK-2167 EmailAsUsername not reflected during registration through broker 2015-11-30 22:46:34 +01:00
Marek Posolda 0bf53ad0ab Merge pull request #1905 from mposolda/master
Minor fixes
2015-11-30 20:58:26 +01:00
mposolda bf7863b300 Minor fixes 2015-11-30 20:18:36 +01:00
Marek Posolda 07e12f3b5f Merge pull request #1904 from mposolda/master
Fixes
2015-11-30 20:05:46 +01:00
mposolda 0f3d2bbfb4 KEYCLOAK-2149 DB fixes. firstBrokerLogin migration 2015-11-30 18:57:31 +01:00
mposolda 5b61a10b55 KEYCLOAK-2061 Direct Access Grants disabled by default 2015-11-30 15:56:21 +01:00
mposolda ec327c99f4 KEYCLOAK-2152 KEYCLOAK-2061 Client switches changes. Support for response_types and grant_types in OIDC Client registration 2015-11-30 15:31:38 +01:00
Stian Thorgersen 0492d84b59 Merge pull request #1902 from stianst/master
KEYCLOAK-2158
2015-11-30 15:22:33 +01:00
Bill Burke f394e2552a Merge pull request #1798 from girirajsharma/Keycloak-2044
[KEYCLOAK-2044] Cannot map multiple external roles into Keycloak roles through custom OIDC Identity Provider
2015-11-30 08:42:03 -05:00
Stian Thorgersen 5a686c4260 KEYCLOAK-2158
Add add-user-keycloak.sh to server overlays
2015-11-30 14:03:54 +01:00
Stian Thorgersen 642e93be93 Merge pull request #1901 from mstruk/adapter-install-cli
KEYCLOAK-2166 Name clash of bin/adapter-install.cli in adapter-dist and saml-adapter-dist
2015-11-30 13:52:41 +01:00
Stian Thorgersen 2a6851b01f Merge pull request #1900 from stianst/KEYCLOAK-2063
KEYCLOAK-2063 Fix verify email link from admin endpoint
2015-11-30 13:17:17 +01:00
Marko Strukelj 2726db0be9 KEYCLOAK-2166 Name clash of bin/adapter-install.cli in adapter-dist and saml-adapter-dist 2015-11-30 12:53:51 +01:00
Stian Thorgersen 61c2ec04a4 Merge pull request #1898 from velias/KEYCLOAK-2164
KEYCLOAK-2164 - removed Cancel button from 'Change password' screen in Account app
2015-11-30 12:45:39 +01:00
Stian Thorgersen 8d6a1d5a1d Merge pull request #1899 from stianst/master
Exclude admin console tests from Travis due to stability issues
2015-11-30 12:44:29 +01:00
Stian Thorgersen 233b1e2553 KEYCLOAK-2063 Fix verify email link from admin endpoint 2015-11-30 12:10:45 +01:00
Stian Thorgersen 956ea431c8 Merge pull request #1897 from mstruk/npe
KEYCLOAK-2039 NPE on startup if keycloak-server.json can't be found
2015-11-30 11:44:56 +01:00
Stian Thorgersen 265b6d5e2a Exclude admin console tests from Travis due to stability issues 2015-11-30 11:29:59 +01:00
Vlastimil Elias b22c28b20e KEYCLOAK-2164 - removed Cancel button from 'Change password' screen in
Account app
2015-11-30 11:05:22 +01:00
Stian Thorgersen 243acdd04e Merge pull request #1889 from stianst/KEYCLOAK-2131-VAL-MAP-NAME
KEYCLOAK-2131 Create mapper form doesn't validate name input
2015-11-30 10:55:33 +01:00
Stian Thorgersen c49394c308 Merge pull request #1888 from stianst/KEYCLOAK-2132-ROLE-SELECTOR
KEYCLOAK-2132
2015-11-30 10:51:44 +01:00
Marko Strukelj fd5cb84dd1 KEYCLOAK-2039 NPE on startup if keycloak-server.json can't be found
- fix NPE and throw RuntimeException if config file not found
2015-11-30 10:26:39 +01:00
Stian Thorgersen 54b5a6c41e Merge pull request #1896 from vramik/authFlows
arquillian-testsuite: auth flows tests
2015-11-30 09:52:12 +01:00
Stian Thorgersen 83fa03e8cc Merge pull request #1894 from mstruk/saml-subsystem
KEYCLOAK-1924 SAML adapter full subsystem EAP/Wildfly
2015-11-30 09:51:33 +01:00
Stian Thorgersen 6863b711e3 Merge pull request #1892 from gtudan/KEYCLOAK-2163
KEYCLOAK-2163: require user-admin role for clearing brute force detection status
2015-11-30 09:50:59 +01:00
Stian Thorgersen 2c5510284d Merge pull request #1891 from mstruk/wildfly-modules-rename
KEYCLOAK-2099 WildFly 10 adapter subsystem
2015-11-30 09:48:15 +01:00
Stian Thorgersen 96cfb895db Merge pull request #1890 from stianst/KEYCLOAK-2137-ROLE-NAME-MAP-DUP
Keycloak 2137 role name map dup
2015-11-30 09:47:23 +01:00
Gregor Tudan 46f947113c KEYCLOAK-2163: require user admin role for clearing bruteforce detection status 2015-11-30 08:56:26 +01:00
Marek Posolda fa4e32ddcb Merge pull request #1895 from mposolda/master
Implicit flow and hybrid flow. Client switches.
2015-11-28 09:02:52 +01:00
mposolda 57b60797ce KEYCLOAK-1129 Implicit flow: more work 2015-11-28 00:15:41 +01:00
Marko Strukelj 38d160fab2 KEYCLOAK-1924 SAML adapter full subsystem EAP/Wildfly 2015-11-27 22:49:35 +01:00
mposolda ef80b64d1c KEYCLOAK-1129 Implicit flow and Hybrid flow support 2015-11-27 22:28:38 +01:00
mposolda 8d2e4c0316 KEYCLOAK-2061 Add switches to enable/disable grant types for clients 2015-11-27 22:28:38 +01:00
Bill Burke ae83ad258b Merge pull request #1893 from patriot1burke/master
KEYCLOAK-2058
2015-11-27 15:27:08 -05:00
Bill Burke 5fa59262ce fix saml admin console 2015-11-27 15:24:56 -05:00
Marko Strukelj 373fc23fc0 KEYCLOAK-2099 WildFly 10 adapter subsystem 2015-11-27 20:46:20 +01:00
Stian Thorgersen 58dc8776d6 KEYCLOAK-2137 Select mapperTypeCreate contains Role Name Mapper twice 2015-11-27 16:13:50 +01:00
Stian Thorgersen 20212d8d70 KEYCLOAK-2131 Create mapper form doesn't validate name input 2015-11-27 16:01:22 +01:00
Stian Thorgersen cb20d360c4 KEYCLOAK-2132
Error message is not displyed when trying to select empty role.
2015-11-27 15:53:33 +01:00
Stian Thorgersen 8e127bf699 Merge pull request #1887 from stianst/KEYCLOAK-2111
KEYCLOAK-2111 Cannot select language on Login dialog on small resolution
2015-11-27 15:39:13 +01:00
Stian Thorgersen 4d24a874f9 KEYCLOAK-2111 Cannot select language on Login dialog on small resolution 2015-11-27 14:42:37 +01:00
Stian Thorgersen 7200996ae0 Merge pull request #1886 from stianst/master
KEYCLOAK-2156
2015-11-27 12:32:07 +01:00
Stian Thorgersen 34cc750b13 KEYCLOAK-2156
Unrecognized field identityFederationEnabled importing old realm json
2015-11-27 12:31:00 +01:00
Stian Thorgersen 0ad6d708da Merge pull request #1884 from stianst/KEYCLOAK-2106-JWT-FIX
KEYCLOAK-2106 HTTP 500 for unparsable refresh tokens
2015-11-27 10:54:08 +01:00
Stian Thorgersen c83e3bd2d1 KEYCLOAK-2106 HTTP 500 for unparsable refresh tokens 2015-11-27 08:59:23 +01:00
Stian Thorgersen 5ea880cfff Merge pull request #1880 from stianst/KEYCLOAK-2129-USRCACHE
KEYCLOAK-2139
2015-11-26 21:14:08 +01:00
Stian Thorgersen 4276328794 Merge pull request #1883 from stianst/KEYCLOAK-2147-FF
KEYCLOAK-2147
2015-11-26 21:07:46 +01:00
Stian Thorgersen 7c4c77d70e KEYCLOAK-2147 2015-11-26 20:24:33 +01:00
Stian Thorgersen 632216d53f KEYCLOAK-2144 Set locale cookie to http-only 2015-11-26 20:06:05 +01:00
Stian Thorgersen d5105164e9 Merge pull request #1882 from abstractj/KEYCLOAK-2048
KEYCLOAK-2148: Update HmacOTP to make use of SecureRandom
2015-11-26 19:40:52 +01:00
Stian Thorgersen 7a9e2db18f Merge pull request #1879 from abstractj/KEYCLOAK-2136
KEYCLOAK-2136: Unexpected error when trying to create mapper with aleady existing name
2015-11-26 19:40:04 +01:00
Bruno Oliveira 0d582a1326 KEYCLOAK-2148: Update HmacOTP to make use of SecureRandom 2015-11-26 15:53:56 -02:00
Bruno Oliveira a99df49bc9 KEYCLOAK-2136: Unexpected error when trying to create mapper with already existing name 2015-11-26 13:55:10 -02:00
Stian Thorgersen b996e88dbd KEYCLOAK-2139
UserCache invalidation does not work proper
2015-11-26 16:39:06 +01:00
Stian Thorgersen 426a2b46fc Merge pull request #1877 from stianst/KEYCLOAK-2129
KEYCLOAK-2129
2015-11-26 15:33:39 +01:00
Stian Thorgersen 4a020d545b Merge pull request #1876 from stianst/KEYCLOAK-2082
KEYCLOAK-2082
2015-11-26 12:43:05 +01:00
Stian Thorgersen ee363a4c56 KEYCLOAK-2129 2015-11-26 12:41:55 +01:00
Stian Thorgersen bf4d5f4df9 KEYCLOAK-2082
Cross site scripting issues
2015-11-26 10:12:43 +01:00
Stian Thorgersen 30ec60b4e2 Merge pull request #1849 from girirajsharma/KEYCLOAK-2117
[KEYCLOAK-2117] It is possible to add a user or group attribute with an empty key
2015-11-26 09:25:49 +01:00
Stian Thorgersen a744ecba9e Merge pull request #1875 from abstractj/KEYCLOAK-2057
KEYCLOAK-2057: DB error with JPA EventStore and long value of not-existing client
2015-11-26 09:25:08 +01:00
Stian Thorgersen e764461b1a Merge pull request #1874 from stianst/KEYCLOAK-2134-IFRAME
KEYCLOAK-2134 login-status-iframe.html without any parameter throws 5…
2015-11-26 08:19:28 +01:00
Bruno Oliveira f376facb48 KEYCLOAK-2057: DB error with JPA EventStore and long value of not-existing client 2015-11-26 01:32:05 -02:00
girirajsharma 31614df7c4 [KEYCLOAK-2117] It is possible to add a user or group attribute with an empty key 2015-11-26 00:41:19 +05:30
Stian Thorgersen 335f852600 Merge pull request #1869 from stianst/EMAIL
Email fixes
2015-11-25 20:05:45 +01:00
Stian Thorgersen c26aeb654b KEYCLOAK-2134 login-status-iframe.html without any parameter throws 500 with NullpointerException 2015-11-25 19:58:46 +01:00
Stian Thorgersen 969cc6eb9e Merge pull request #1873 from stianst/master
Ignore LdapUserFederationTest#invalidSettingsTest
2015-11-25 19:58:17 +01:00
Stian Thorgersen f5326e1f42 Ignore LdapUserFederationTest#invalidSettingsTest 2015-11-25 19:57:31 +01:00
Stian Thorgersen e664a4a6b2 Merge pull request #1868 from stianst/KEYCLOAK-2043
KEYCLOAK-2043 Set cache-control header in well-known endpoints
2015-11-25 19:55:45 +01:00
Stian Thorgersen c15571f65c Merge pull request #1866 from mhajas/master
Added ConfigTest to integration arquillian testsuite
2015-11-25 19:06:54 +01:00
Stian Thorgersen 1eacdc6904 KEYCLOAK-2043 Set cache-control header in well-known endpoints 2015-11-25 18:58:44 +01:00
Stian Thorgersen be040eaa18 KEYCLOAK-2133 KEYCLOAK-1782 2015-11-25 18:58:05 +01:00
Bill Burke 889679c715 Merge pull request #1872 from patriot1burke/master
KEYCLOAK-1970
2015-11-25 12:01:51 -05:00
Bill Burke 8ae3551c4d KEYCLOAK-1970 2015-11-25 12:01:28 -05:00
Bill Burke cfd4de033b Merge pull request #1871 from patriot1burke/master
2115 and 2114
2015-11-25 12:00:34 -05:00
Bill Burke d6e2bccb16 Merge pull request #1840 from velias/KEYCLOAK-2075
KEYCLOAK-2075 KEYCLOAK-2107 - support for SAML IsPassive mode
2015-11-25 10:35:00 -05:00
Bill Burke eeec89583e Merge remote-tracking branch 'upstream/master' 2015-11-25 10:18:37 -05:00
Bill Burke d2bdb74fef Merge pull request #1870 from patriot1burke/master
KEYCLOAK-2095
2015-11-25 10:18:15 -05:00
Bill Burke b04b124351 KEYCLOAK-2114 2015-11-25 10:13:44 -05:00
Bill Burke 067cb120f8 KEYCLOAK-2115 2015-11-25 09:58:57 -05:00
Bill Burke 0bab4e63fa KEYCLOAK-2095 2015-11-25 09:52:11 -05:00
Bill Burke b48f32380c Merge pull request #1867 from ramirost/feature/locale_ca
Added Catalan translations
2015-11-25 08:58:27 -05:00
Bill Burke 0c8f3f734d Merge pull request #1855 from Smartling/KEYCLOAK-1391
KEYCLOAK-1391: Return an HTTP 401 for API requests
2015-11-25 08:57:05 -05:00
Bill Burke 4f401c7547 Merge pull request #1848 from girirajsharma/KEYCLOAK-2121
[KEYCLOAK-2121] Adding user or group attributes using ENTER key deletes first attribute
2015-11-25 08:53:42 -05:00
Bill Burke df74338cbc Merge pull request #1850 from girirajsharma/KEYCLOAK-2113
[KEYCLOAK-2113] Cannot delete group
2015-11-25 08:52:26 -05:00
Vlastimil Elias e3060e5e58 rebased to latest master 2015-11-25 13:46:29 +01:00
Ramiro Sánchez 15309a94cc Added Catalan translations 2015-11-25 09:48:53 +01:00
Stian Thorgersen c05e21c049 Merge pull request #1863 from stianst/KEYCLOAK-2050
KEYCLOAK-2050 KEYCLOAK-2051 Fix notifications
2015-11-25 09:08:00 +01:00
mhajas 62d519ed37 fix phantomjs problem with ConfigTest 2015-11-25 08:42:41 +01:00
Vlastimil Elias 18fa03bf97 KEYCLOAK-2107 - support IsPassive mode in SAML SP adapter library
KEYCLOAK-2075 - added integration tests for both server and adapter side
2015-11-25 08:39:55 +01:00
Vlastimil Elias 0bdb05e152 KEYCLOAK-2075 - support for IsPassive mode in SAML IdP endpoint 2015-11-25 08:29:46 +01:00
mhajas 09af45201b Merge remote-tracking branch 'upstream/master' 2015-11-25 07:36:32 +01:00
Stian Thorgersen dd85c125cb KEYCLOAK-2050 KEYCLOAK-2051 Fix notifications 2015-11-25 07:28:27 +01:00
Stian Thorgersen 274838aa64 Merge pull request #1860 from stianst/KEYCLOAK-2118
KEYCLOAK-2118 OTP Policy form doesn't remember Number of Digits
2015-11-25 06:59:17 +01:00
Stian Thorgersen ecb39cda0c Merge pull request #1865 from ramirost/feature/locale_es
Feature/locale es
2015-11-25 06:58:36 +01:00
Stian Thorgersen 3685a185d4 Merge pull request #1859 from stianst/reset-pass
KEYCLOAK-1758 add-user script
2015-11-25 06:56:35 +01:00
Bill Burke 030a35476a Merge pull request #1864 from patriot1burke/master
sendError() handling
2015-11-24 18:46:59 -05:00
Ramiro Sánchez 4ffe86583b fixed Spanish translations 2015-11-25 00:17:09 +01:00
Ramiro Sánchez 24f765ceef Merge branch 'upstream/master' into fork/master
* upstream_master: (115 commits)
  KEYCLOAK-1964 Database field for passwordPolicy is too small
  KEYCLOAK-1971 REST end point does't validate password policies properly
  KEYCLOAK-2104 Add caching of message bundles and properties to ExtendingThemeManager
  KEYCLOAK-2116 - Fix Label of Regenerate Secret button.
  Tweak Travis again
  KEYCLOAK-1937 OpenID Connect Dynamic Client Registration
  fix null pointer
  remove empty password check in direct grant flow
  Updated Travis configuration
  Exclude .lastUpdated files from Travis cache
  KEYCLOAK-2119 OTP Policy form validates both TOTP and HOTP at the same time
  [KEYCLOAK-2119] OTP Policy form validates both TOTP and HOTP at the same time
  KEYCLOAK-2010
  remove empty password check
  default groups ui
  KEYCLOAK-1749 Add documentation and fixed clean-up of expired initial access tokens
  Remove unused import
  Fix missing group in angular $scope in GroupMembersCtrl.
  arquillian-testsuite: Customizable waiting timeouts in class WaitUtils. Changed time unit to MILLISECONDS.
  default groups
  ...
2015-11-24 23:52:24 +01:00
Bill Burke c729835c3e fix2 2015-11-24 17:25:05 -05:00
Bill Burke 507fa4c250 fix 2015-11-24 17:21:30 -05:00
Bill Burke bba781beee messed up 2015-11-24 17:19:55 -05:00
Bill Burke 980a1eca5e Merge remote-tracking branch 'upstream/master' 2015-11-24 16:48:40 -05:00
Bill Burke ff63c5552a sendError() handling' 2015-11-24 16:48:24 -05:00
Stian Thorgersen 985661c1b9 Merge pull request #1862 from stianst/KEYCLOAK-1964
KEYCLOAK-1964 Database field for passwordPolicy is too small
2015-11-24 22:04:52 +01:00
Stian Thorgersen b168656eab KEYCLOAK-2118 OTP Policy form doesn't remember Number of Digits 2015-11-24 22:04:37 +01:00
Stian Thorgersen 94ba87ac05 Merge pull request #1861 from stianst/KEYCLOAK-1971
KEYCLOAK-1971 REST end point does't validate password policies properly
2015-11-24 21:55:16 +01:00
Stian Thorgersen cfc28b861b KEYCLOAK-1758 add-user script 2015-11-24 21:54:58 +01:00
Stian Thorgersen 38408658f9 Merge pull request #1857 from thomasdarimont/issue/KEYCLOAK-2116
KEYCLOAK-2116 - Fix Label of Regenerate Secret button.
2015-11-24 21:23:44 +01:00
Stian Thorgersen 998bb9986f Merge pull request #1853 from stianst/KEYCLOAK-2104
KEYCLOAK-2104 Add caching of message bundles and properties to Extend…
2015-11-24 21:22:02 +01:00
Stian Thorgersen 8d2a95d66b KEYCLOAK-1964 Database field for passwordPolicy is too small 2015-11-24 20:57:41 +01:00
Stian Thorgersen 500bced6ee KEYCLOAK-1971 REST end point does't validate password policies properly 2015-11-24 20:50:41 +01:00
Stian Thorgersen 81960a6996 KEYCLOAK-2104 Add caching of message bundles and properties to ExtendingThemeManager 2015-11-24 20:23:20 +01:00
Stian Thorgersen ccd456dba6 Merge pull request #1858 from stianst/master
Tweak Travis again
2015-11-24 20:23:14 +01:00
Thomas Darimont bac39bc71e KEYCLOAK-2116 - Fix Label of Regenerate Secret button. 2015-11-24 20:11:55 +01:00
Stian Thorgersen a8c2e79565 Tweak Travis again 2015-11-24 20:08:41 +01:00
Marek Posolda d6089597ff Merge pull request #1847 from gerbermichi/password
remove empty password check
2015-11-24 17:23:51 +01:00
Stian Thorgersen c901fc7480 Merge pull request #1845 from stianst/client-reg
Client reg
2015-11-24 16:33:55 +01:00
Stian Thorgersen 4f2b97de7f KEYCLOAK-1937
OpenID Connect Dynamic Client Registration

KEYCLOAK-1938
Register clients from SAML Entity Descriptors
2015-11-24 15:39:36 +01:00
Michael Gerber 9a3e023c43 fix null pointer 2015-11-24 13:54:33 +00:00
Michael Gerber 142ef50728 remove empty password check in direct grant flow 2015-11-24 11:11:16 +00:00
Stian Thorgersen d2ba4669ab Merge pull request #1856 from stianst/master
Updated Travis configuration
2015-11-24 10:57:08 +01:00
Stian Thorgersen ba0b59bfd0 Updated Travis configuration 2015-11-24 10:00:58 +01:00
Scott Rossillo f1c3295cec KEYCLOAK-1391: Return an HTTP 401 for API requests
Non browser HTTP requests shouldn't redirect to the Keycloak login
page. Instead, return an HTTP 401 with a proper WWW-Authenticate
header.
2015-11-23 10:46:14 -05:00
Stian Thorgersen 04ddf7ba4d Merge pull request #1854 from stianst/master
Exclude .lastUpdated files from Travis cache
2015-11-23 14:01:46 +01:00
mhajas 8f346a5f59 Merge remote-tracking branch 'origin/master' 2015-11-23 13:12:23 +01:00
mhajas 22e3abdaa8 added ConfigTest for events 2015-11-23 13:11:55 +01:00
Stian Thorgersen f1af3e9fb7 Exclude .lastUpdated files from Travis cache 2015-11-23 13:08:13 +01:00
Stian Thorgersen 5e479ba4df Merge pull request #1852 from stianst/master
KEYCLOAK-2119
2015-11-23 12:48:16 +01:00
Stian Thorgersen f6743eff69 KEYCLOAK-2119
OTP Policy form validates both TOTP and HOTP at the same time
2015-11-23 12:02:39 +01:00
Stian Thorgersen 5a761f2f3a Merge pull request #1851 from girirajsharma/KEYCLOAK-2119
[KEYCLOAK-2119] OTP Policy form validates both TOTP and HOTP at the same time
2015-11-23 11:59:00 +01:00
Stian Thorgersen 261d32f8e7 Merge pull request #1841 from vramik/master
arquillian-testsuite: Customizable waiting timeouts in class WaitUtil…
2015-11-23 11:26:22 +01:00
Stian Thorgersen 282e702ef6 Merge pull request #1836 from tkyjovsk/master
KEYCLOAK-1646 Added adapter test module for EAP6
2015-11-23 11:23:29 +01:00
Stian Thorgersen cc014fe0e5 Merge pull request #1844 from lkubik/unusedImport
Remove unused import
2015-11-23 11:21:13 +01:00
girirajsharma 95f62901c2 [KEYCLOAK-2119] OTP Policy form validates both TOTP and HOTP at the same time 2015-11-22 23:04:45 +05:30
girirajsharma cf8b0abaad [KEYCLOAK-2113] Cannot delete group 2015-11-22 20:52:31 +05:30
girirajsharma e761fb24e6 [KEYCLOAK-2121] Adding user or group attributes using ENTER key deletes first attribute 2015-11-22 16:14:34 +05:30
Bill Burke b1deed67df Merge remote-tracking branch 'upstream/master' 2015-11-21 08:58:15 -05:00
Bill Burke d3cadc9a47 saml error handling 2015-11-21 08:58:02 -05:00
Bill Burke 32e069eadc Merge pull request #1846 from patriot1burke/master
default groups UI
2015-11-20 19:18:21 -05:00
Bill Burke 17c97c2f68 KEYCLOAK-2010 2015-11-20 16:18:42 -05:00
Bill Burke 48bb4d86e0 Merge pull request #1842 from thomasdarimont/issue/missing-groupid-membersctrl
Fix missing group in angular $scope in GroupMembersCtrl.
2015-11-20 16:07:37 -05:00
Michael Gerber eda018ba0a remove empty password check 2015-11-20 18:42:56 +01:00
Bill Burke ac1baa059f Merge pull request #1797 from raehalme/KEYCLOAK-2041
KEYCLOAK-2041 Use sendError instead of setStatus to report errors
2015-11-20 11:50:37 -05:00
Bill Burke 670b620da7 Merge remote-tracking branch 'upstream/master' 2015-11-20 10:41:19 -05:00
Bill Burke 1545593cde default groups ui 2015-11-20 10:41:08 -05:00
Stian Thorgersen aedd23a43d Merge pull request #1843 from stianst/client-reg
KEYCLOAK-1749 Add documentation and fixed clean-up of expired initial…
2015-11-19 19:58:42 +01:00
Stian Thorgersen 7e8c80c0df KEYCLOAK-1749 Add documentation and fixed clean-up of expired initial access tokens 2015-11-19 16:11:41 +01:00
Lukas Kubik 9f6813fcad Remove unused import 2015-11-19 15:15:55 +01:00
Thomas Darimont 14292843ff Fix missing group in angular $scope in GroupMembersCtrl.
Previously navigating to the group members tab of a group breaks other groups links (RoleMappings, Attributes etc.) because the groupId part of the url is missing.
 One sees:
 /auth/admin/master/console/#/realms/master/groups//role-mappings
 Instead of:
 /auth/admin/master/console/#/realms/master/groups/0f77aeed-7d16-4938-9fcc-c74b1125e5e0/role-mappings
2015-11-19 13:54:18 +01:00
vramik 71e25bcd65 arquillian-testsuite: Customizable waiting timeouts in class WaitUtils. Changed time unit to MILLISECONDS. 2015-11-19 13:14:30 +01:00
Bill Burke 9f1fa5ebb9 Merge pull request #1839 from patriot1burke/master
default groups back end
2015-11-18 20:59:46 -05:00
Bill Burke 98958a2bc4 default groups 2015-11-18 19:40:30 -05:00
Bill Burke 7da9f8085d Merge pull request #1838 from patriot1burke/master
groups: resolve roles, and mongo fixes
2015-11-18 16:19:17 -05:00
Bill Burke 6989589e72 Merge remote-tracking branch 'upstream/master' 2015-11-18 15:24:45 -05:00
Bill Burke 4f00f6cceb group mongo 2015-11-18 15:24:27 -05:00
Stian Thorgersen 95e729b0b7 Merge pull request #1832 from stianst/client-reg
KEYCLOAK-2085
2015-11-18 19:34:47 +01:00
Tomas Kyjovsky 38c460de82 KEYCLOAK-1646 Added module for adapter tests on EAP6. Using 'wildfly-arquillian-container-managed' instead of 'jboss-as-arquillian-container-managed' for both EAP6 and AS7 adapter tests. 2015-11-18 18:21:46 +01:00
Bill Burke 41331111da resolve conflicts 2015-11-18 09:39:19 -05:00
Bill Burke bff334d365 group token/assertion and tests 2015-11-18 09:36:47 -05:00
Stian Thorgersen 41c9289f14 KEYCLOAK-1749 Moved clien registration api 2015-11-18 15:09:32 +01:00
Marek Posolda 1d06d9dd64 Merge pull request #1834 from mposolda/master
KEYCLOAK-2102 added AbstractKerberosTest.caseInsensitiveTest
2015-11-18 14:05:46 +01:00
Stian Thorgersen ec9b2933cc Merge pull request #1833 from thomasdarimont/issue/KEYCLOAK-2101
KEYCLOAK-2101 - Ensure consistent property order in json configuration export.
2015-11-18 13:30:15 +01:00
Stian Thorgersen 1ff5d6eb06 KEYCLOAK-2085 Internationalization in client initial access controller 2015-11-18 13:25:08 +01:00
mposolda bc22abf8cb KEYCLOAK-2102 added AbstractKerberosTest.caseInsensitiveTest 2015-11-18 12:35:17 +01:00
Marek Posolda 81eb1e1e30 Merge pull request #1830 from bagges/master
[KEYCLOAK-2102] treat principal name case insensitive
2015-11-18 12:35:06 +01:00
Stian Thorgersen e8cb3a416d KEYCLOAK-2085 Added initial access token support to admin console 2015-11-18 10:33:27 +01:00
Stian Thorgersen 764c20d748 KEYCLOAK-2085 Initial access tokens for client registration 2015-11-18 10:33:24 +01:00
Thomas Darimont c81d0c0898 KEYCLOAK-2101 - Ensure consistent order for properties in json configuration export.
We now explicitly order the AuthenticatorFlows, AuthenticatorConfig, as well
as RequiredActions to ensure a consistent order for the configuration export to make
it easier to diff / version keycloak configuration files.
Previously the order of the json properties of an configuration export were
non deterministic. The configuration file could look partially different after a
 export, import, export sequence even if no changes were made.
2015-11-17 22:34:21 +01:00
Stian Thorgersen 67fca8f1f3 Merge pull request #1831 from abstractj/KEYCLOAK-2100
KEYCLOAK-2100: 500 Internal Server Error with Update the events provider via Admin REST API
2015-11-17 20:35:48 +01:00
Bruno Oliveira 22c5c803ca KEYCLOAK-2100: 500 Internal Server Error with Update the events provider via Admin REST API 2015-11-17 14:04:24 -02:00
Stian Thorgersen f6d716a386 Merge pull request #1829 from stianst/client-reg
KEYCLOAK-1749 Rotate registration access token, add registration acce…
2015-11-17 13:29:53 +01:00
Stian Thorgersen 62c5bc0e91 KEYCLOAK-1749 Rotate registration access token, add registration access token to admin console 2015-11-17 09:44:50 +01:00
Markus Backes 5e329d7b29 Merge branch 'master' of https://github.com/keycloak/keycloak 2015-11-17 09:32:41 +01:00
Markus Backes 1bd9b18803 treat principal name case insensitive
* Kerberos login with active directory failed with invalid username or password because AD treats principal names in a case insensitive way (https://ssimo.org/blog/id_016.html)
2015-11-17 09:32:14 +01:00
Stian Thorgersen 96fe4269ec Merge pull request #1828 from abstractj/KEYCLOAK-2065
KEYCLOAK-2065: Update the client via Admin REST API causes 500 Internal Server Error
2015-11-17 08:31:54 +01:00
Stian Thorgersen 83ff02ea53 Merge pull request #1825 from stianst/client-reg
KEYCLOAK-1749 Client registration service
2015-11-16 20:23:55 +01:00
Stian Thorgersen 1df741a307 Merge pull request #1826 from lkubik/changeAllJettyToProvided
KEYCLOAK-2081
2015-11-16 20:23:31 +01:00
Bruno Oliveira 409356f734 KEYCLOAK-2065: Update the client via Admin REST API causes 500 Internal Server Error 2015-11-16 16:32:52 -02:00
Stian Thorgersen bad0a95123 KEYCLOAK-1749 Client registration service
Changed endpoints of client registration to just clients

Started installation

Added adapter config retrival to client reg
2015-11-16 13:24:56 +01:00
Stian Thorgersen 1bc08fff16 Merge pull request #1823 from abstractj/KEYCLOAK-2056
KEYCLOAK-2056: Removal of file model provider
2015-11-16 08:33:56 +01:00
Marek Posolda ab436705c8 Merge pull request #1827 from mposolda/broker-reauthentication
KEYCLOAK-1750 First broker login - migration, documentation. Other minor fixes
2015-11-13 20:10:28 +01:00
mposolda ea7709a104 KEYCLOAK-2026 Fix realm.getMasterAdminClient() in JPA and Mongo models 2015-11-13 18:51:09 +01:00
mposolda 1d5a01577e KEYCLOAK-1750 First broker login - migration 2015-11-13 18:51:09 +01:00
mposolda 4288260aa6 KEYCLOAK-1822 Don't redirect to login theme when error during link identity in account mgmt. 2015-11-13 18:51:09 +01:00
mposolda 600d1f8a56 KEYCLOAK-1750 First broker login - docs 2015-11-13 18:51:09 +01:00
Bruno Oliveira f7b1af7e11 Removal of module keycloak-connections-file 2015-11-13 13:44:15 -02:00
Bruno Oliveira 4b0e33e388 KEYCLOAK-2056: Removal of file model provider 2015-11-13 13:44:15 -02:00
Stian Thorgersen 8caaabb2e5 Merge pull request #1820 from thomasdarimont/issue/KEYCLOAK-2068-NPE-in-KeycloakOidcFilter
KEYCLOAK-2068 - Fix Potential NPE when using Servlet-Filter Adapter.
2015-11-13 16:00:34 +01:00
Stian Thorgersen 1bd0e23f31 Merge pull request #1824 from bystrikhorvath/master
KEYCLOAK-2077: correcting paths in custom-attributes.xml
2015-11-13 15:53:31 +01:00
Lukas Kubik 13a52c1bb2 KEYCLOAK-2081
Change scope of jetty dependencies to provided
2015-11-13 15:43:11 +01:00
Bill Burke fa7a7d35a9 Merge remote-tracking branch 'upstream/master' 2015-11-13 09:30:37 -05:00
Bill Burke fe5809db4d token group roles 2015-11-13 09:30:25 -05:00
Bill Burke 1510d9672a Merge pull request #1803 from gerbermichi/user
KEYCLOAK-2024 - username guessing
2015-11-13 08:53:05 -05:00
Bill Burke 9b93468131 Merge pull request #1818 from patriot1burke/master
group membership ui
2015-11-13 08:49:23 -05:00
bystrikhorvath 2e16a55815 KEYCLOAK-2077: correcting paths in custom-attributes.xml 2015-11-13 14:00:20 +01:00
Marek Posolda f65665b5eb Merge pull request #1822 from mposolda/broker-reauthentication
KEYCLOAK-1750 first broker login - events and tests
2015-11-13 10:27:38 +01:00
mposolda ce4a865579 KEYCLOAK-1750 First broker login - tests 2015-11-13 09:32:46 +01:00
mposolda f2e4e67ba0 KEYCLOAK-1750 First broker login - events 2015-11-13 09:32:46 +01:00
Stian Thorgersen 37f1eaae0e Merge pull request #1821 from stianst/master
KEYCLOAK-2037 Update documentation
2015-11-13 09:04:17 +01:00
Stian Thorgersen 6c3a3517b8 KEYCLOAK-2037 Update documentation 2015-11-13 09:03:58 +01:00
Thomas Darimont c4416a25e0 KEYCLOAK-2068 - Fix Potential NPE when using Servlet-Filter Adapter.
When using the `org.keycloak.adapters.servlet.KeycloakOIDCFilter` a `NullPointerException`
can be thrown in the `org.keycloak.adapters.servlet.FilterSessionStore` within the `getParam`
method of the generated wrapper in `buildWrapper` when the `content-type` is not set.
Since the `content-type` is only used to parse the body. We just check whether the `body`
is `null` and if so avoid touching the `content-type` which prevents the NPE.

If the `body` is null we return an empty `MultivaluedHashMap` for the parameters.
2015-11-13 00:14:34 +01:00
Bill Burke 550f773293 Merge remote-tracking branch 'upstream/master' 2015-11-12 13:16:50 -05:00
Bill Burke d7ea66ad44 group membership ui 2015-11-12 13:16:30 -05:00
Bill Burke 2022a8d36b Merge pull request #1817 from patriot1burke/master
user group membership ui
2015-11-12 13:09:37 -05:00
Bill Burke 0d20e3c7ff Merge remote-tracking branch 'upstream/master' 2015-11-12 11:31:55 -05:00
Bill Burke 21119604c6 user group membership 2015-11-12 11:31:44 -05:00
Stian Thorgersen 973609d39b Merge pull request #1816 from stianst/master
KEYCLOAK-2066
2015-11-12 14:44:03 +01:00
Stian Thorgersen 77bccda7a4 KEYCLOAK-2066
View details on import client not working
2015-11-12 14:03:09 +01:00
Stian Thorgersen 0c9f0ea3e6 Merge pull request #1813 from vmuzikar/missing-ids
Add missing IDs to some UI elements; add POs to Client Mappers
2015-11-12 13:36:19 +01:00
Stian Thorgersen 73197332c4 Merge pull request #1814 from pdrozd/federation-tests
Add Federation tests for admin console.
2015-11-12 13:36:03 +01:00
Stian Thorgersen ee0dd7e200 Merge pull request #1815 from abstractj/KEYCLOAK-2064
KEYCLOAK-2064: Update pax-web to make use of SecureRandom
2015-11-12 13:35:33 +01:00
Bruno Oliveira 9203971809 KEYCLOAK-2064: Update pax-web to make use of SecureRandom 2015-11-12 09:46:45 -02:00
Pavel Drozd 4e7fe1de8d Add Federation tests for admin console. 2015-11-12 12:23:37 +01:00
Stian Thorgersen 4646a4aceb Merge pull request #1811 from stianst/master
KEYCLOAK-2060
2015-11-12 11:59:00 +01:00
Stian Thorgersen 64baa28301 Merge pull request #1810 from lkubik/updateJettyScope
Change scope of jetty dependencies in jetty-adapter-spi
2015-11-12 09:23:44 +01:00
Stian Thorgersen db84571546 Merge pull request #1807 from vramik/KEYCLOAK-2031
KEYCLOAK-2031: Input validation in OTP Policy page fix, test
2015-11-12 09:23:13 +01:00
Stian Thorgersen 99cddcef6c Merge pull request #1805 from velias/KEYCLOAK-2033
KEYCLOAK-2033 - Allow custom SPI Providers to show additional info on
2015-11-12 09:21:38 +01:00
Stian Thorgersen 1891019067 Merge pull request #1802 from equinux/pr/fix-js-parameter-encoding
Fix parameter encoding in JS adapter
2015-11-12 09:19:21 +01:00
Stian Thorgersen b0b4d26fa3 KEYCLOAK-2060
Upgrade to WildFly 9.0.2.Final
2015-11-12 09:17:47 +01:00
Bill Burke 6cc76b2e3d Merge pull request #1788 from patriot1burke/master
groups data model
2015-11-11 19:38:01 -05:00
Bill Burke 33ac048c8c resolve conflicts 2015-11-11 18:06:39 -05:00
Bill Burke e25157655b group ui 2015-11-11 18:03:53 -05:00
Stian Thorgersen 213abb87ba Merge pull request #1808 from stianst/master
KEYCLOAK-2055
2015-11-11 20:24:08 +01:00
Lukas Kubik 825a68c6c9 Change scope of jetty dependencies in jetty-adapter-spi. 2015-11-11 17:01:46 +01:00
Stian Thorgersen 816ed9419b Merge pull request #1809 from lkubik/unifyJettyVersionWithOthers
Unify jetty version in keycloak-jetty-adapter-spi with other jetty versions
2015-11-11 16:10:17 +01:00
Stian Thorgersen 15f1a38b51 KEYCLOAK-2055
Invalid links in docs index.html
2015-11-11 14:32:43 +01:00
Lukas Kubik 1f75f85a20 Unify jetty version in keycloak-jetty-adapter-spi with other versions 2015-11-11 13:58:22 +01:00
Vaclav Muzikar dfb39d13a2 Removed IDs from Password Policy
(cherry picked from commit 35376b7)
2015-11-11 12:00:44 +01:00
Bill Burke b8391e0935 Merge pull request #1778 from girirajsharma/keycloak-1994
[KEYCLOAK-1994] It's not possible to create flow with same name as deleted nested flow
2015-11-10 10:58:57 -05:00
vramik ab56460325 KEYCLOAK-2031: Input validation in OTP Policy page fix, test 2015-11-10 16:57:29 +01:00
Vaclav Muzikar 059ebacffc Removed IDs from redirect URIs and Web Origins in Client
(cherry picked from commit 5c68854)
2015-11-10 15:46:55 +01:00
Stian Thorgersen e1a07bd5a8 Merge pull request #1806 from tkyjovsk/karaf-fuse-update
Karaf fuse update
2015-11-10 15:28:36 +01:00
Tomas Kyjovsky 37d7182fc9 Merge upstream-master into karaf-fuse-update
Conflicts:
	testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/KeycloakArquillianExtension.java
2015-11-10 13:44:23 +01:00
Tomas Kyjovsky e1ba26bcae KEYCLOAK-1661 Added support for testing adapters/examples on fuse 6.2. Moved CustomKarafContainer from the base module to the adapters/karaf module. 2015-11-10 13:39:59 +01:00
Vlastimil Elias b39146f6f5 KEYCLOAK-2033 - Allow custom SPI Providers to show additional info on
Server Info page
2015-11-10 12:55:36 +01:00
Marek Posolda caea1a3458 Merge pull request #1804 from mposolda/broker-reauthentication
KEYCLOAK-1750 First broker login changes
2015-11-10 11:52:47 +01:00
Dominique d'Argent 7ef747e7c4 Fix parameter encoding in JS adapter
- fixes https://issues.jboss.org/browse/KEYCLOAK-2047
- relates to keycloak/keycloak-js-bower#7
2015-11-10 11:20:06 +01:00
mposolda 4ca442d1b2 KEYCLOAK-1750 Option updateProfileOnFirstLogin moved from IdentityProvider to IdpReviewProfile authenticator 2015-11-10 11:06:23 +01:00
mposolda 99e75c69a0 KEYCLOAK-1750 First broker login - support for change password after first social login 2015-11-10 10:25:31 +01:00
Michael Gerber 1437f7da35 KEYCLOAK-2024 - username guessing 2015-11-10 09:04:10 +01:00
Stian Thorgersen fa9abbf016 Merge pull request #1801 from vramik/KEYCLOAK-2046
KEYCLOAK-2046 Remove JIRA checker extension
2015-11-10 07:50:24 +01:00
vramik 6bce32ba62 arquillian-testsuite: auth flows test 2015-11-09 15:59:34 +01:00
vramik ee801c2c32 arquillian-testsuite: KEYCLOAK-2046 2015-11-09 15:03:17 +01:00
Marek Posolda 2b23497f92 Merge pull request #1799 from mposolda/broker-reauthentication
KEYCLOAK-1750 Improve first time login with social. Added 'first brok…
2015-11-09 13:15:33 +01:00
Stian Thorgersen 04ba5c235e Merge pull request #1800 from stianst/master
Disable JIRA checker extension - this should be removed completely
2015-11-09 13:05:04 +01:00
Stian Thorgersen 1521f56225 Disable JIRA checker extension - this should be removed completely 2015-11-09 12:11:20 +01:00
Stian Thorgersen 251adbba0b Fix OTPPolicyTest 2015-11-09 12:10:19 +01:00
mposolda adbf2b22ad KEYCLOAK-1750 Improve first time login with social. Added 'first broker login' flow 2015-11-09 10:34:55 +01:00
Stian Thorgersen 2b29c3acf4 Merge pull request #1795 from abstractj/KEYCLOAK-2031
Input validation in OTP Policy page
2015-11-09 10:08:38 +01:00
Stian Thorgersen 076690e21e Merge pull request #1794 from tkyjovsk/karaf-fuse-update
Adapter tests for Karaf: Fuse Example installation now done via JMX i…
2015-11-09 10:08:27 +01:00
Stian Thorgersen b586f93182 Merge pull request #1793 from stianst/KEYCLOAK-2037
KEYCLOAK-2037 Fix domain mode for server-dist
2015-11-09 10:08:03 +01:00
Stian Thorgersen 5a318df041 Merge pull request #1791 from vramik/uitests
arquillian-testsuite add UI tests, page objects refactoring
2015-11-09 10:02:23 +01:00
Stian Thorgersen cd01ea49b4 Merge pull request #1777 from girirajsharma/keycloak-1993
[KEYCLOAK-1993] It's possible to create new authentication flow with empty name within another flow
2015-11-09 09:54:07 +01:00
girirajsharma dd2824ab20 [KEYCLOAK-2044] Cannot map multiple external roles into Keycloak roles through custom OIDC Identity Provider 2015-11-08 20:10:14 +05:30
Bruno Oliveira 8db6972441 Input validation in OTP Policy page 2015-11-06 11:52:21 -02:00
Tomas Kyjovsky 027311c0c0 Adapter tests for Karaf: Fuse Example installation now done via JMX instead of maven-karaf plugin. Needed for testing on Fuse. 2015-11-06 13:03:42 +01:00
Thomas Raehalme 68edf9ce48 Errors are now reported using sendError instead of setStatus.
This change was made to enable the use of error pages defined in web.xml.
2015-11-06 10:53:18 +02:00
Thomas Raehalme 7b7fbd3257 Added sendError(int) to HttpFacade.Response. 2015-11-06 10:47:08 +02:00
Stian Thorgersen d0c50fe56d KEYCLOAK-2037 Fix domain mode for server-dist 2015-11-06 08:44:50 +01:00
girirajsharma 4075d65241 [KEYCLOAK-1993] It's possible to create new authentication flow with empty name within another flow 2015-11-05 21:59:04 +05:30
vramik 267be83863 arquillian-testsuite: add UI test for OTP Policy
Conflicts:
	testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/authentication/flows/CreateFlow.java
2015-11-05 13:37:59 +01:00
Stian Thorgersen 15828e899b Merge pull request #1790 from dvantooster/master
KEYCLOAK-2032 Changed some column names from lower- to uppercase
2015-11-05 13:03:20 +01:00
Stian Thorgersen ce089019e6 Merge pull request #1786 from mhajas/master
Add consent tests to integration-arquillian testsuite
2015-11-05 13:02:44 +01:00
Stian Thorgersen c9c49a9c64 Merge branch 'ramirost-feature/i18n_es' 2015-11-05 12:59:29 +01:00
Stian Thorgersen 623f39862d Merge branch 'feature/i18n_es' of https://github.com/ramirost/keycloak into ramirost-feature/i18n_es 2015-11-05 12:59:06 +01:00
Stian Thorgersen 818c3ab1c5 Merge pull request #1785 from ccheneau/master
Fix french translation for account and login resource bundles
2015-11-05 12:54:17 +01:00
Stian Thorgersen 1ce028ead7 Merge pull request #1789 from abstractj/pbeutils-removal
Removal of PBEUtils
2015-11-05 12:49:22 +01:00
Stian Thorgersen d844e6b4af Merge pull request #1776 from girirajsharma/keycloak-1995
[KEYCLOAK-1995] Replace provider select options with Labels displayed in flows table
2015-11-05 12:08:23 +01:00
vramik 7b4dcb6965 arquillian-testsuite: add UI test for Bindings flows 2015-11-04 18:14:41 +01:00
Daniël van 't Ooster 7bd0b7ddfc KEYCLOAK-2032 Changed some column names from lower- to uppercase, so it is in sync with liquibase scripts 2015-11-04 11:43:09 +01:00
Bruno Oliveira d2912673b0 Removal of PBEUtils 2015-11-04 02:06:21 -02:00
Stian Thorgersen 28ee95138a Merge pull request #1773 from iperdomo/master
KEYCLOAK-2016
2015-11-03 15:55:21 +01:00
Bill Burke d46b4eb5fe Merge pull request #1780 from agolPL/master
extract hardcoded keycloak configuration file name
2015-11-02 11:51:04 -05:00
Bill Burke 151c56a304 conflicts 2015-11-02 11:21:10 -05:00
Bill Burke c2ad918975 group model 2015-11-02 11:19:19 -05:00
Tomas Kyjovsky 634eadb634 Merge pull request #1787 from vramik/migration
arquillian-testsuite: Migration test
2015-11-02 15:36:18 +01:00
vramik d26cfcda42 arquillian testsuite, migration test: update execution of dependency plugin for migration scenario 2015-11-02 11:56:26 +01:00
vramik 4a9a39c08d arquillian testsuite, migration test: fix 2015-10-30 14:01:48 +01:00
vramik 9796b7f06e arquillian testsuite, migration test: initial version of migration test 2015-10-30 13:27:38 +01:00
vramik c2e14cb924 arquillian testsuite, migration test: fixed typo in arquillian.xml, add migration test for 1.5.1.Final 2015-10-30 11:32:01 +01:00
Bill Burke d896800ec6 groups initial 2015-10-29 16:33:02 -04:00
mhajas b74e0dad10 remove ConfigTest 2015-10-29 16:50:29 +01:00
mhajas 2c8b0fc3e1 Merge remote-tracking branch 'upstream/master' 2015-10-29 16:41:46 +01:00
vramik cd640339fc arquillian testsuite, migration test: fixed assembly.xml for 1.6.1.Final 2015-10-29 15:11:50 +01:00
vramik 52c02f03ae arquillian testsuite, migration test: fixed assembly.xml for 1.6.1.Final 2015-10-29 15:09:33 +01:00
vramik 84da341912 arquillian testsuite, migration test: add support for 1.5.1.Final 2015-10-29 14:48:05 +01:00
vramik 2c3958ce27 arquillian testsuite, migration test: update test realm to 1.6.1.Final 2015-10-29 14:43:23 +01:00
vramik 515f049ce6 arquillian testsuite, migration test: update version from 1.6.0.Final to 1.6.1.Final 2015-10-29 14:27:23 +01:00
vramik 03acad9b9d arquillian testsuite: increased startup timeout for containers 2015-10-29 13:41:38 +01:00
vramik 0392ebab32 arquillian testsuite: remove adding test realm in migration scenario 2015-10-29 12:22:33 +01:00
vramik 52804da497 arquillian testsuite: improve log messages for migration test 2015-10-29 11:36:29 +01:00
Cédric Chéneau 31df2046f0 Correction page login 2015-10-28 09:38:02 +01:00
Cédric Chéneau f14681f122 Correction page account 2015-10-28 09:35:17 +01:00
Cédric Chéneau d7d52b3295 Correction page account 2015-10-28 09:34:16 +01:00
ccheneau 8e71910e00 Fix french translation for account and login resource bundles 2015-10-27 20:14:41 +01:00
vramik e6620ca005 arquillian-testsuite added initial version of migration test 2015-10-27 14:31:15 +01:00
Ramiro Sánchez 490b8ce86f Added Spanish language support 2015-10-27 12:05:32 +01:00
vramik 480444ffc5 Merge upstream/master into migration 2015-10-27 11:50:30 +01:00
vramik 2fd7e5b355 arquillian-testsuite fixed whitespaces 2015-10-27 11:43:49 +01:00
vramik f45e0aa387 arquillian-testsuite migration servers: removed unused properties 2015-10-27 11:41:33 +01:00
vramik 6c77c295d5 arquillian-testsuite refactoring migration servers 2015-10-27 11:40:41 +01:00
vmuzikar ccfaf72b09 Init changes
(cherry picked from commit 31d8cab)
2015-10-26 15:47:05 +01:00
vmuzikar 700740a378 Added POs for client mappers
(cherry picked from commit f2cd982)
2015-10-26 15:45:55 +01:00
vmuzikar 8062f5f50e Added POs for client mappers
(cherry picked from commit f491c3c)
2015-10-26 15:43:00 +01:00
vmuzikar 5e0851c25f Rewritten some POs to use @id attributes
(cherry picked from commit 12b9c7e)
2015-10-26 14:17:07 +01:00
Marek Posolda 81650a89f9 Merge pull request #1782 from mposolda/master
KEYCLOAK-2005 Fixed migration to take less time. Added UserProvider.g…
2015-10-26 14:12:14 +01:00
vmuzikar 709449243c Added @id to some UI elements
(cherry picked from commit 4034258)
2015-10-26 14:02:30 +01:00
mhajas df24d8a01f Merge remote-tracking branch 'upstream/master' 2015-10-26 12:26:47 +01:00
mposolda f8f4de9389 KEYCLOAK-2005 Fixed migration to take less time. Added UserProvider.grantToAllUsers 2015-10-26 11:06:19 +01:00
agolPl 9755d79879 extract keycloak configuration file name 2015-10-25 00:26:18 +02:00
girirajsharma 70cbeaf336 [KEYCLOAK-1994] It's not possible to create flow with same name as deleted nested flow 2015-10-24 22:57:40 +05:30
girirajsharma b0a71fbeb0 Replace provider select options with Labels displayed in flows table 2015-10-24 13:28:43 +05:30
Marek Posolda 44f56e1d74 Merge pull request #1775 from mposolda/master
Migration and other fixes
2015-10-23 23:41:08 +02:00
mposolda 74924f2f8c KEYCLOAK-2011 2015-10-23 22:48:06 +02:00
mposolda c498b06f68 KEYCLOAK-2007 Migration upgrade for 1.6.1 2015-10-23 22:47:53 +02:00
Iván Perdomo 525bee66a4 KEYCLOAK-2016
Change label to Forgot password
2015-10-23 16:02:30 +02:00
Stian Thorgersen cd51a95764 Merge pull request #1771 from ramirost/release/locale
Added support to indicate desired locale on login options
2015-10-23 15:16:37 +02:00
Ramiro Sánchez 57c282eca8 Updated documentation with the new 'locale' parameter 2015-10-23 14:32:16 +02:00
Ramiro Sánchez ebd02a1a7f Changed query parameter from kc_locale to ui_locales as suggested by stianst 2015-10-23 14:21:59 +02:00
Stian Thorgersen cc4583bc0b Merge pull request #1772 from stianst/master
KEYCLOAK-2015
2015-10-23 13:41:27 +02:00
Stian Thorgersen 11ef67722b KEYCLOAK-2015
autofocus on input text field in login-totp.ftl
2015-10-23 13:40:57 +02:00
Stian Thorgersen 5316dd6d50 Merge pull request #1770 from gerbermichi/autofocus
autofocus on input text field in login-reset-password.ftl
2015-10-23 13:39:29 +02:00
Stian Thorgersen 3cee33847f Merge pull request #1769 from gerbermichi/client
expose client attributes in ClientBean
2015-10-23 13:38:25 +02:00
Stian Thorgersen a2b5b6dc71 Merge pull request #1768 from stianst/master
Fix saml examples not excluded from deploy
2015-10-23 13:37:48 +02:00
Ramiro Sánchez a5dc91f9a6 Added support to indicate desired locale on login 2015-10-23 12:23:24 +02:00
Michael Gerber 3b4b1b20d8 expose client attributes in ClientBean 2015-10-23 09:41:03 +02:00
Michael Gerber b32423d96b autofocus on input field 2015-10-23 09:38:40 +02:00
Stian Thorgersen 4f2fe0197d Fix saml examples not excluded from deploy 2015-10-23 08:48:43 +02:00
Stian Thorgersen aa25c899ee Merge pull request #1765 from vramik/migration-kc16
add support for migration tests - Keycloak 1.6.0.Final
2015-10-23 08:31:08 +02:00
Marek Posolda fa6b99eaab Merge pull request #1767 from mposolda/master
KEYCLOAK-1999 KC server doesn't start on EAP 6.4 in local mode on Pos…
2015-10-22 15:08:54 +02:00
mposolda e04dbffb88 KEYCLOAK-1999 KC server doesn't start on EAP 6.4 in local mode on PostgreSQL 2015-10-22 14:28:08 +02:00
vramik f823b17b90 add path for migration test realm 2015-10-22 14:04:50 +02:00
mhajas 7dfb7ddccd Merge remote-tracking branch 'upstream/master' 2015-10-21 15:41:34 +02:00
vramik 4b444d36b0 removed changes in admin-client 2015-10-21 10:35:19 +02:00
Stian Thorgersen 23546402fa Merge pull request #1749 from cfsnyder/master
KEYCLOAK-1863 added both issuer and account name to otp configuration
2015-10-21 09:24:58 +02:00
vramik edfc7ea103 add support for migration tests - KC1.6.0.Final 2015-10-20 17:00:57 +02:00
Stian Thorgersen 3a7c84c9e1 Merge pull request #1763 from mstruk/KEYCLOAK-1988
KEYCLOAK-1988 Loader constraint violation in multi-tenant example
2015-10-20 06:06:40 +02:00
Marko Strukelj 6b1287a553 KEYCLOAK-1988 Loader constraint violation in multi-tenant example 2015-10-19 22:11:31 +02:00
Stian Thorgersen c860c671d1 Fix parent of docbook modules 2015-10-19 19:37:51 +02:00
Marek Posolda 072950e9f3 Merge pull request #1762 from mposolda/master
KEYCLOAK-1987 Minor fixes in fuse demo
2015-10-19 19:23:05 +02:00
mposolda 8226abef40 KEYCLOAK-1987 Minor fixes in fuse demo 2015-10-19 17:29:04 +02:00
Bill Burke 0d05d38eb6 Merge remote-tracking branch 'upstream/master' 2015-10-19 10:21:03 -04:00
Stian Thorgersen 4f4368b29f Merge pull request #1761 from stianst/master
Version bump
2015-10-19 16:16:27 +02:00
Stian Thorgersen 3f8312427a Version bump 2015-10-19 16:15:29 +02:00
Marek Posolda 73bb579dc5 Merge pull request #1758 from mposolda/master
KEYCLOAK-1981 Migration fix of create-client
2015-10-19 14:11:37 +02:00
Stian Thorgersen c75528f81e Merge pull request #1760 from stianst/master
KEYCLOAK-1985
2015-10-19 13:35:37 +02:00
Stian Thorgersen 28bfac7214 KEYCLOAK-1985 2015-10-19 13:35:04 +02:00
Stian Thorgersen 1c9a347391 Merge pull request #1759 from stianst/master
KEYCLOAK-1984
2015-10-19 13:25:17 +02:00
Stian Thorgersen df03f51563 KEYCLOAK-1984
Examples includes pom.xml.releaseBackup
2015-10-19 13:25:02 +02:00
mposolda 7d590761dd KEYCLOAK-1981 Migration fix of create-client 2015-10-19 12:46:47 +02:00
Marek Posolda 944c416b45 Merge pull request #1757 from mposolda/master
KEYCLOAK-1983 Fix Oracle and Sybase
2015-10-19 12:27:45 +02:00
mposolda 028cbe1ce2 KEYCLOAK-1983 Fix Oracle and Sybase 2015-10-19 11:45:49 +02:00
Stian Thorgersen 256ca2b665 Merge pull request #1756 from stianst/master
KEYCLOAK-1977
2015-10-19 08:47:21 +02:00
Stian Thorgersen e4412523d4 Merge pull request #1754 from vramik/migration-kc15
arquillian-testsuite add migration-kc15
2015-10-19 08:44:51 +02:00
Stian Thorgersen 073d82b367 KEYCLOAK-1977 2015-10-19 08:43:34 +02:00
Stian Thorgersen 484c5ebb15 Merge pull request #1755 from stianst/master
Tweak authentication flow page a bit
2015-10-19 08:42:22 +02:00
vramik 4c33704c56 add support for migration kc1.5.1 2015-10-18 16:01:26 +02:00
Marek Posolda 511763d4bc Merge pull request #1753 from mposolda/master
KEYCLOAK-1952 Migration fix. Change some INFO messages to DEBUG/TRACE
2015-10-17 10:02:55 +02:00
mposolda 605c80a68d KEYCLOAK-1952 Migration fix. Change some INFO messages to DEBUG/TRACE 2015-10-16 20:51:40 +02:00
Marek Posolda 2325143803 Merge pull request #1751 from mposolda/master
KEYCLOAK-1972 docs and export/import fixes for offline tokens. DB fixes
2015-10-16 19:58:41 +02:00
mposolda 9cc5ca3ce4 KEYCLOAK-1972 docs and export/import fixes for offline tokens. DB fixes 2015-10-16 19:09:52 +02:00
Marek Posolda d13c120b6c Merge pull request #1750 from mposolda/master
KEYCLOAK-1929 Change package names. Fix Fuse demo
2015-10-16 17:35:14 +02:00
Bill Burke 186de7235c Merge remote-tracking branch 'upstream/master' 2015-10-16 11:03:42 -04:00
Bill Burke 9433ef284a set browser flow switch 2015-10-16 11:03:30 -04:00
mposolda 9942c7b519 Fix integration-arquillian 2015-10-16 16:57:28 +02:00
mposolda 4587fd23b6 KEYCLOAK-1929 Change package names. Fix Fuse demo 2015-10-16 16:30:42 +02:00
mhajas 32647d8682 Add tests for access grant and revoking grant 2015-10-16 16:22:30 +02:00
Cory Snyder d8ebf1e3d6 KEYCLOAK-1863 added both issuer and account name to otp configuration 2015-10-16 09:46:56 -04:00
Stian Thorgersen c21b56d596 Merge pull request #1748 from stianst/tweak-auth-page
Tweak authentication flow page a bit
2015-10-16 14:54:51 +02:00
Stian Thorgersen 4ee5c32b1e Merge pull request #1745 from stianst/kc-1969
KEYCLOAK-1969
2015-10-16 14:54:09 +02:00
Stian Thorgersen 6386d95904 Tweak authentication flow page a bit 2015-10-16 14:04:57 +02:00
Stian Thorgersen f99395aebe Merge pull request #1746 from mhajas/master
KEYCLOAK-1865 - Stabilize some integration-arquillian tests
2015-10-16 14:04:04 +02:00
Stian Thorgersen 82a7173dba Merge pull request #1747 from stianst/kc-1975
KEYCLOAK-1975
2015-10-16 14:03:47 +02:00
Stian Thorgersen 2bf6f4b0fd Tweak authentication flow page a bit 2015-10-16 14:03:30 +02:00
Stian Thorgersen d8e90028af Merge pull request #1744 from stianst/kc-1973
KEYCLOAK-1973 Clear user from authentication context is password is n…
2015-10-16 12:52:46 +02:00
Stian Thorgersen d2afb4892a KEYCLOAK-1975
Increase/decrease flow priority doesn't work
2015-10-16 12:52:07 +02:00
Stian Thorgersen eb9f69eee0 KEYCLOAK-1969
Admin console displays Clients flow page when execution or execution flow is created.
2015-10-16 12:23:41 +02:00
mhajas 39f985e04a Clean code 2015-10-16 12:09:35 +02:00
mhajas 41a51d924b Merge remote-tracking branch 'upstream/master' 2015-10-16 12:03:03 +02:00
mhajas ce996f6a41 Fix PasswordPolicyTest stability 2015-10-16 11:33:11 +02:00
mhajas 244848afc4 Fix events tests stability 2015-10-16 11:31:45 +02:00
Stian Thorgersen 2910db5595 KEYCLOAK-1973 Clear user from authentication context is password is not valid 2015-10-16 11:24:45 +02:00
Stian Thorgersen a6556a49c2 Merge pull request #1738 from gerbermichi/locale
KEYCLOAK-1962 update realm overwrites supported locales with empty list
2015-10-16 10:21:20 +02:00
Bill Burke e4961056db Merge pull request #1743 from patriot1burke/master
KEYCLOAK-1941
2015-10-15 20:41:35 -04:00
Bill Burke c8eee38471 Merge pull request #1742 from patriot1burke/master
KEYCLOAK-1954
2015-10-15 20:41:12 -04:00
Bill Burke 1e4b3fc3b6 KEYCLOAK-1941 2015-10-15 20:26:20 -04:00
Bill Burke 14426f26f2 KEYCLOAK-1954 2015-10-15 20:05:44 -04:00
Bill Burke 19ad846306 Merge pull request #1741 from patriot1burke/master
KEYCLOAK-1960
2015-10-15 19:33:55 -04:00
Bill Burke 235ffb2ff6 KEYCLOAK-1960 2015-10-15 18:56:56 -04:00
Bill Burke 181fdeb0d0 KEYCLOAK-1960 2015-10-15 18:54:57 -04:00
Bill Burke 8674578d0d Merge pull request #1730 from patriot1burke/master
KEYCLOAK-1908
2015-10-15 18:32:57 -04:00
Bill Burke 9cf4186eb2 fix arquillian test 2015-10-15 17:56:51 -04:00
Marek Posolda 92ed01a61b Merge pull request #1740 from mposolda/master
Offline tokens fixes & improvements
2015-10-15 23:15:50 +02:00
Bill Burke 99028e9cab Merge remote-tracking branch 'upstream/master' 2015-10-15 16:30:35 -04:00
Bill Burke 20f18eec15 support browser refresh 2015-10-15 16:30:21 -04:00
mposolda 67435791ed KEYCLOAK-1961 revokeRefreshToken support for offline tokens and other fixes 2015-10-15 22:30:17 +02:00
mposolda b4520baee5 KEYCLOAK-1959 Role offline_access was effective only when explicitly added to user 2015-10-15 22:30:17 +02:00
mposolda 802a39b1ce KEYCLOAK-904 Offline session idle timeout + admin console 2015-10-15 22:30:17 +02:00
Stian Thorgersen 229b964867 Merge pull request #1739 from mstruk/cli
KEYCLOAK-1849 Overlay installation scripts not working
2015-10-15 16:26:44 +02:00
mhajas b413bcb41d Unignored test 2015-10-15 14:57:58 +02:00
Marko Strukelj 0c39e30241 KEYCLOAK-1849 Overlay installation scripts not working
- fix unsupported dependency 'org.infinispan:main' warning
2015-10-15 13:46:38 +02:00
Marko Strukelj 11a8d3842e KEYCLOAK-1849 Overlay installation scripts not working 2015-10-15 13:46:38 +02:00
mhajas 2c460c3adc Test password policies using REST 2015-10-15 12:44:27 +02:00
Vlasta Ramik aaddaa6c25 Merge remote-tracking branch 'upstream/master' 2015-10-15 12:30:17 +02:00
Stian Thorgersen 96099e0798 Merge pull request #1732 from stianst/master
KEYCLOAK-1961
2015-10-15 10:57:23 +02:00
Stian Thorgersen e582de2837 KEYCLOAK-1961
Same token can be used multiple times to obtain access token
2015-10-15 09:11:18 +02:00
Stian Thorgersen e1fc863421 Merge pull request #1719 from gautric/french-i18n
French i18n
2015-10-15 08:54:26 +02:00
Stian Thorgersen 7de4051c9b Merge pull request #1737 from thomasdarimont/issue/KEYCLOAK-1918
KEYCLOAK-1918 - Add description field to client definition.
2015-10-15 08:53:47 +02:00
Stian Thorgersen 5b7b5b1b60 Merge pull request #1736 from stianst/test
Add test to make sure expired password is checked on direct grant
2015-10-15 08:53:28 +02:00
Michael Gerber f8effaee58 return null instead of an empty set. 2015-10-15 08:19:18 +02:00
Stian Thorgersen bf7d43fffb Add test to make sure expired password is checked on direct grant 2015-10-15 08:03:54 +02:00
Thomas Darimont 870702fd81 KEYCLOAK-1918 - Add description field to client definition.
Introduced description field with support for i18n for more descriptive client information.
Applications can use the description to display a "slightly" longer gist of
what the client / application is about, especially useful for tooltips.

The description is currently limited to 255 characters.
2015-10-15 07:33:38 +02:00
Stian Thorgersen 2a3e5fa7a4 Merge pull request #1733 from stianst/add-user-to-email-templates
KEYCLOAK-1965
2015-10-15 06:50:51 +02:00
Stian Thorgersen 90063cafec KEYCLOAK-1965
Include the user resource in the attribute map used by email provider freemarker
2015-10-14 20:29:15 +02:00
Stian Thorgersen 2b6fcc05e1 Merge pull request #1731 from stianst/master
Fix docbook
2015-10-14 20:15:54 +02:00
Stian Thorgersen f585ed5582 Fix docbook 2015-10-14 20:15:35 +02:00
Stian Thorgersen 192387047f Merge pull request #1728 from stianst/master
KEYCLOAK-1930
2015-10-14 20:15:00 +02:00
Bill Burke 78664e2571 Merge remote-tracking branch 'upstream/master' 2015-10-14 11:50:02 -04:00
Bill Burke bc71739fb2 Merge pull request #1729 from patriot1burke/master
KEYCLOAK-1839
2015-10-14 11:49:41 -04:00
Bill Burke 5563118d79 KEYCLOAK-1908 2015-10-14 11:49:36 -04:00
Bill Burke aadd63e2b0 Merge remote-tracking branch 'upstream/master' 2015-10-14 10:51:14 -04:00
Bill Burke 59d548228a KEYCLOAK-1839 2015-10-14 10:50:53 -04:00
Marek Posolda 68c3f2f65b Merge pull request #1726 from mposolda/master
KEYCLOAK-904 Offline tokens storage changes. Added UserSessionPersisterProvider . offline sessions preloaded to cache at startup
2015-10-14 14:24:54 +02:00
Stian Thorgersen b54bb25121 KEYCLOAK-1930 2015-10-14 14:22:10 +02:00
Stian Thorgersen 7f65a2be16 Merge pull request #1727 from stianst/master
Disable cli install scripts for overlay
2015-10-14 13:53:23 +02:00
Stian Thorgersen b907f8f92c Disable cli install scripts 2015-10-14 13:52:36 +02:00
Stian Thorgersen 3381ed50d1 KEYCLOAK-1930 2015-10-14 12:36:25 +02:00
mposolda c2c2b835b2 Unable to compile on JDK 7 2015-10-14 11:23:10 +02:00
mposolda f92fe6bea9 KEYCLOAK-904 Offline tokens storage changes. Added UserSessionPersisterProvider . offline sessions preloaded to cache at startup 2015-10-14 11:07:44 +02:00
Stian Thorgersen 6aa029784a Merge pull request #1724 from stianst/master
KEYCLOAK-1849 KEYCLOAK-1958 Fix install scripts for overlays
2015-10-14 09:31:07 +02:00
Stian Thorgersen 325072c74d KEYCLOAK-1849 KEYCLOAK-1958 Fix install scripts for overlays 2015-10-14 09:24:06 +02:00
Stian Thorgersen 1e48143db0 Merge pull request #1723 from stianst/master
KEYCLOAK-1877
2015-10-14 09:23:35 +02:00
Stian Thorgersen 8c72ef2980 KEYCLOAK-1877
Empty bubble in admin event types select box
2015-10-14 07:22:56 +02:00
Stian Thorgersen e7febbd5a5 Merge pull request #1700 from kodemaniak/master
URI based configuration of MongoDB to support Replica Sets
2015-10-14 07:07:03 +02:00
Stian Thorgersen d9211d6bc9 Merge pull request #1718 from lkubik/capitalizeAllLetters
KEYCLOAK-1945
2015-10-14 06:53:24 +02:00
Stian Thorgersen 8121a9391f Merge pull request #1721 from stianst/master
KEYCLOAK-1883
2015-10-14 06:49:23 +02:00
Stian Thorgersen 65b05fd4e4 Merge pull request #1722 from ssilvert/catch-missing-bundle-keys
Catch missing bundle keys
2015-10-14 06:38:40 +02:00
Stan Silvert 940c9f8bf1 KEYCLOAK-1933 Validate resource bundles for admin console 2015-10-13 18:25:14 -04:00
Stian Thorgersen c85e0248dd KEYCLOAK-1883
Improve setting of users locale
2015-10-13 19:47:10 +02:00
Stian Thorgersen 2ec143a3ba Fix tests 2015-10-13 13:17:46 +02:00
Stian Thorgersen a279ff3d7f Merge pull request #1717 from stianst/master
KEYCLOAK-1947 Add tests without client secret
2015-10-13 10:36:42 +02:00
gautric 128c26043b [KEYCLOAK-1903] Add French language support, cross link with other translation 2015-10-13 10:08:34 +02:00
gautric fe9b5a6588 Merge remote-tracking branch 'keycloak/master' into french-i18n 2015-10-13 10:02:04 +02:00
Lukas Kubik 0f93e72b02 KEYCLOAK-1945
Change capitalize function behavior
2015-10-13 09:18:54 +02:00
Stian Thorgersen bdba5ff8b1 KEYCLOAK-1947 Add tests without client secret 2015-10-13 09:02:09 +02:00
Stian Thorgersen 7071161a7c Merge pull request #1716 from stianst/master
KEYCLOAK-1865
2015-10-13 09:00:29 +02:00
Stian Thorgersen 672103e363 KEYCLOAK-1865
Failing tests in testsuite/integration-arquillian
2015-10-13 09:00:12 +02:00
Stian Thorgersen f579d7ffe9 Merge pull request #1715 from stianst/fix-email-removed-profile
KEYCLOAK-1823
2015-10-13 08:58:58 +02:00
Stian Thorgersen d1f0b353e8 Merge pull request #1714 from stianst/master
KEYCLOAK-1335
2015-10-13 08:26:50 +02:00
Stian Thorgersen ef56dca050 KEYCLOAK-1823
Annoying behaviour of validations in user registration form
2015-10-13 08:14:39 +02:00
Stian Thorgersen 07c3772b08 KEYCLOAK-1823
Annoying behaviour of validations in user registration form
2015-10-13 07:36:20 +02:00
Stian Thorgersen 85a886da18 KEYCLOAK-1823
Annoying behaviour of validations in user registration form
2015-10-13 07:30:31 +02:00
Stian Thorgersen 4ce93171ba KEYCLOAK-1335
Slow startup in OpenStack
2015-10-13 07:00:47 +02:00
Stian Thorgersen c987d57b9e Merge pull request #1713 from girirajsharma/master
[KEYCLOAK-1923] It's possible to create new authentication flow with empty name
2015-10-13 06:49:24 +02:00
Stian Thorgersen a416327124 Merge pull request #1712 from gautric/french-i18n
[KEYCLOAK-1903] Add French language support, add and fix some translations
2015-10-13 06:49:05 +02:00
girirajsharma 285ef50341 [KEYCLOAK-1923] It's possible to create new authentication flow with empty name 2015-10-13 00:29:08 +05:30
Stian Thorgersen 0d22074826 Merge pull request #1711 from stianst/remove-zip-export
KEYCLOAK-1944
2015-10-12 19:38:32 +02:00
gautric b76fb68ff7 [KEYCLOAK-1903] Add French language support, 2xSimpleQuote correction 2015-10-12 19:32:04 +02:00
gautric f03128f5ed [KEYCLOAK-1903] Add French language support, 2xSimpleQuote correction 2015-10-12 19:31:07 +02:00
gautric 8fb05bacd1 [KEYCLOAK-1903] Add French language support, correct accent 2015-10-12 19:29:09 +02:00
gautric f8842b3df1 [KEYCLOAK-1903] Add French language support. add and fixes some translation 2015-10-12 19:25:31 +02:00
gautric b376d1fb6d Some fixes into "fr" messages 2015-10-12 16:52:14 +02:00
gautric d4e0901599 Merge remote-tracking branch 'keycloak/master' into french-i18n 2015-10-12 16:27:18 +02:00
Vlasta Ramik 217c359530 Merge remote-tracking branch 'upstream/master' 2015-10-12 15:35:04 +02:00
Stian Thorgersen 4fbf6841be KEYCLOAK-1944
Remove winzipaes import/export provider
2015-10-12 14:43:52 +02:00
Stian Thorgersen 2deb20a2c9 Merge pull request #1710 from stianst/master
Fix for issue introduced by fixing KEYCLOAK-1931
2015-10-12 14:03:57 +02:00
Stian Thorgersen 20b92c410f Fix for issue introduced by fixing KEYCLOAK-1931 2015-10-12 14:03:38 +02:00
Vlasta Ramik 1d829a8365 Merge remote-tracking branch 'upstream/master' 2015-10-12 13:55:36 +02:00
Stian Thorgersen 10b4bd24a4 Merge pull request #1706 from girirajsharma/Patch-Keycloak-1931
[KEYCLOAK-1931] UI doesn't reflect when flow is deleted.
2015-10-12 13:48:45 +02:00
Stian Thorgersen 788501f13d Merge pull request #1704 from AOEpeople/KEYCLOAK-1910
KEYCLOAK-1910, added same fix for registrations endpoint
2015-10-12 13:36:02 +02:00
Carsten Saathoff 345bea50b6 Added documentation about the mongodb:// URI based configuration and how to use a MongoDB replica set. 2015-10-12 13:04:48 +02:00
gautric ab7bfa6d90 Merge remote-tracking branch 'keycloak/master' 2015-10-12 11:45:08 +02:00
Stian Thorgersen 4f7979d9fc Merge pull request #1707 from stianst/client-reg
Refactored client registration service
2015-10-12 11:15:19 +02:00
Stian Thorgersen 286458b94a Merge pull request #1709 from stianst/fix-test-timeouts
Disable failing tests
2015-10-12 10:51:17 +02:00
Stian Thorgersen 61a8c422df Disable failing tests 2015-10-12 09:39:57 +02:00
Stian Thorgersen baaf445727 Merge pull request #1678 from gautric/master
[KEYCLOAK-1903] Add French language support
2015-10-12 08:49:44 +02:00
Stian Thorgersen 2faf0eccdb Refactored client registration service 2015-10-12 08:31:39 +02:00
girirajsharma 639b5b617b [KEYCLOAK-1931] UI doesn't reflect when flow is deleted 2015-10-11 12:42:07 +05:30
girirajsharma 115663a32d [KEYCLOAK-1932] Unable to create flow named exactly the same as removed NON-top level flow 2015-10-11 12:42:07 +05:30
Sebastian Rose b277afa6d9 KEYCLOAK-1910, added same fix for registrations endpoint 2015-10-10 10:40:16 +02:00
Bill Burke 960cd8c822 Merge pull request #1703 from patriot1burke/master
filter docs
2015-10-09 19:02:47 -04:00
Bill Burke 4acc69c604 Merge pull request #1702 from patriot1burke/master
SAML and OIDC Servlet Filter SP
2015-10-09 19:02:18 -04:00
Bill Burke 0230e008c5 filter docs 2015-10-09 18:49:15 -04:00
Bill Burke 382b8d60d0 Merge remote-tracking branch 'upstream/master' 2015-10-09 18:11:53 -04:00
Bill Burke 0ad29c9737 node registration 2015-10-09 18:11:38 -04:00
Bill Burke 9ced56d8d7 saml and oidc filters 2015-10-09 18:07:50 -04:00
Carsten Saathoff eb197c46f7 Setting operational attributes for mongo also when configured via URI. 2015-10-09 15:06:22 +02:00
Stian Thorgersen 63947cd37a Merge pull request #1698 from stianst/master
Renamed 'Keycloak Version to Server Version' on server info page
2015-10-09 13:59:29 +02:00
Stian Thorgersen 938ce9612c Renamed 'Keycloak Version to Server Version' on server info page 2015-10-09 13:59:12 +02:00
Stian Thorgersen d6119c04d6 Merge pull request #1697 from stianst/master
KEYCLOAK-1859 Invalid "Go to the home page" link on the "Resource not…
2015-10-09 13:45:44 +02:00
Stian Thorgersen 14646781ad KEYCLOAK-1859 Invalid "Go to the home page" link on the "Resource not found" page 2015-10-09 13:45:20 +02:00
vramik 1b41832946 fixed verifyEmail test 2015-10-09 13:43:16 +02:00
Stian Thorgersen 57d0bac96a Merge pull request #1696 from stianst/fix-admin-console-not-loading-properly
KEYCLOAK-1876 Some admin console pages don't load properly when accessed via URL
2015-10-09 11:11:03 +02:00
Stian Thorgersen 2ca3ce2dba Merge pull request #1693 from stianst/fix-umlats
KEYCLOAK-1739 User registration form is not able to process diacritics
2015-10-09 10:36:17 +02:00
Stian Thorgersen e5d404fdb3 Remove unused import 2015-10-09 09:54:39 +02:00
Stian Thorgersen 8829fe8658 KEYCLOAK-1739 User registration form is not able to process diacritics 2015-10-09 09:52:25 +02:00
Stian Thorgersen 9ccb0b1f65 Merge pull request #1692 from stianst/fix-json-includes-null
KEYCLOAK-1896 Search for users returns null values
2015-10-09 09:50:30 +02:00
Stian Thorgersen 7bb70f2d00 Merge pull request #1681 from mstruk/i18n
KEYCLOAK-1152 Internationalization support for admin console
2015-10-09 09:50:20 +02:00
Stian Thorgersen 3ab7edbbcd Merge pull request #1695 from stianst/fix-undertow-start
KEYCLOAK-1935 Stop KeycloakServer if Undertow fails to start
2015-10-09 09:49:34 +02:00
Stian Thorgersen d4060cce92 KEYCLOAK-1876 Some admin console pages don't load properly when accessed via URL 2015-10-09 09:44:00 +02:00
Stian Thorgersen 1342904fae KEYCLOAK-1935 Stop KeycloakServer if Undertow fails to start 2015-10-09 09:03:48 +02:00
Stian Thorgersen fc0a3c3e73 Merge pull request #1694 from stianst/master
Fix docbook parent pom artifactId
2015-10-09 08:54:15 +02:00
Stian Thorgersen 756a9f095c Fix docbook parent pom artifactId 2015-10-09 08:53:57 +02:00
Stian Thorgersen 021e48d6d6 Merge pull request #1689 from AOEpeople/KEYCLOAK-1927
KEYCLOAK-1927
2015-10-09 07:06:51 +02:00
Bill Burke 91f78c61b7 Merge pull request #1691 from patriot1burke/master
SAML SP Servlet Filter
2015-10-08 20:50:55 -04:00
Bill Burke d39aee0a72 Merge remote-tracking branch 'upstream/master' 2015-10-08 16:19:56 -04:00
Bill Burke 7c600e2f4b SAML SP Filter 2015-10-08 16:19:43 -04:00
Stan Silvert 14079b950a KEYCLOAK-1933: Validate resource bundles for admin console 2015-10-08 15:23:27 -04:00
Sebastian Rose 173c112f8e KEYCLOAK-1927 2015-10-08 20:34:08 +02:00
Stian Thorgersen 67d8ca0207 KEYCLOAK-1896 Search for users returns null values 2015-10-08 20:15:53 +02:00
Marko Strukelj e690f4e645 KEYCLOAK-1152 Internationalization support for admin console
- Added custom mapper fields localization
2015-10-08 17:11:06 +02:00
Stian Thorgersen 4c554b4af6 Merge pull request #1687 from stianst/client-reg2
KEYCLOAK-1749 Client registration service and client java api
2015-10-08 15:48:58 +02:00
Marko Strukelj 3aee5eeecf KEYCLOAK-1152 Internationalization support for admin console
- Added i18n to 'clients', and 'identity providers' sections
2015-10-08 15:31:03 +02:00
Stian Thorgersen 366a1629e5 KEYCLOAK-1749 Client registration service and client java api 2015-10-08 11:55:42 +02:00
Stian Thorgersen 7fec1677ee Merge pull request #1679 from lkrzyzanek/KEYCLOAK-1904
Add 'register' and 'createRegisterUrl' methods to Javascript Adapter API
2015-10-08 11:51:18 +02:00
Carsten Saathoff 8e391ffa4e After rebase to upstream: Merge branch 'master' of github.com:kodemaniak/keycloak 2015-10-08 10:45:36 +02:00
Carsten Saathoff d65ce5d1d4 Added configuration via mongodb:// uri to mongo provider factory. 2015-10-08 10:44:49 +02:00
Carsten Saathoff 6741dffe38 Added configuration via mongodb:// uri to mongo provider factory. 2015-10-08 10:02:36 +02:00
Stian Thorgersen 894af03323 Merge pull request #1680 from ssilvert/i18n-in-java
KEYCLOAK-1152 i18n for text hard-coded in java source
2015-10-08 06:47:10 +02:00
Bill Burke 80dea9c0bd Merge pull request #1682 from patriot1burke/master
SAML eap adapter and docs
2015-10-07 21:00:33 -04:00
Bill Burke 0b83325470 cleanup 2015-10-07 16:30:42 -04:00
Bill Burke 368ea64b51 Merge remote-tracking branch 'upstream/master' 2015-10-07 16:21:13 -04:00
Bill Burke 450e031da9 saml adapter docs 2015-10-07 16:20:59 -04:00
Marek Posolda 1796a45a68 Merge pull request #1677 from mkdgit/Customized_LDAP_filter_1_6
KEYCLOAK-1906 : Customized LDAP filter
2015-10-07 22:05:30 +02:00
Stan Silvert c9437595b7 KEYCLOAK-1152 i18n for text hard-coded in java source
(ProtocolMapperUtils)
2015-10-07 11:34:34 -04:00
Bill Burke a1b315adbd Merge remote-tracking branch 'upstream/master' 2015-10-07 10:19:26 -04:00
Bill Burke 1781588597 as7/eap saml adapter 2015-10-07 10:19:15 -04:00
Libor Krzyzanek f29aff4bed Add 'register' and 'createRegisterUrl' methods to Javascript Adapter API. fixes #KEYCLOAK-1904 2015-10-07 13:53:25 +02:00
Stian Thorgersen ac91839e69 Merge pull request #1663 from thomasdarimont/issue/KEYCLOAK-1893
KEYCLOAK-1893 - Allow to configure OTP period in admin console.
2015-10-07 09:35:59 +02:00
Stian Thorgersen 9c0c8e37b6 Merge pull request #1676 from Smartling/KEYCLOAK-1901
KEYCLOAK-1901: Add a Keycloak client builder
2015-10-07 09:06:19 +02:00
Bill Burke d40237b08d saml adapters docs/dist 2015-10-06 15:56:44 -04:00
gautric 59527e12f0 [KEYCLOAK-1903] Add French language support, few fixes 2015-10-06 20:01:04 +02:00
gautric 6d0483667f [KEYCLOAK-1903] Add French language support 2015-10-06 18:09:36 +02:00
gautric dcf8747d7e Merge remote-tracking branch 'keycloak/master' 2015-10-06 16:32:11 +02:00
Stian Thorgersen 7a3b4823b0 Merge pull request #1662 from Smartling/KEYCLOAK-1892
WrappedHttpServletRequest may throw an exception returning cookies
2015-10-06 14:58:54 +02:00
Stian Thorgersen 64ecc3b153 Merge pull request #1672 from ssilvert/KEYCLOAK-1882-add-locale-mapper-on-new-realm
KEYCLOAK-1882 Also add locale mapper when new realm is created.
2015-10-06 14:58:27 +02:00
Stian Thorgersen cc41a1fd78 Merge pull request #1656 from gerbermichi/import2
swap import and migrate order (KEYCLOAK-1884)
2015-10-06 12:05:59 +02:00
gautric 255b1cb3bf Merge remote-tracking branch 'keycloak/master' 2015-10-06 10:25:23 +02:00
Michal Drela a1bb202bd4 Customized LDAP filter 2015-10-06 10:01:29 +02:00
Scott Rossillo 332e3f6099 KEYCLOAK-1901: Add a Keycloak client builder
Adds support for creating a Keycloak client using the builder
pattern and supports customizing the underlying ResteasyClient
used for connecting to the Keycloak server.
2015-10-05 14:56:38 -04:00
Bill Burke 6b41d79058 Merge pull request #1675 from patriot1burke/master
saml adapter doc module
2015-10-05 13:34:53 -04:00
Bill Burke 3b4b5c11e6 Merge remote-tracking branch 'upstream/master' 2015-10-05 13:33:55 -04:00
Bill Burke 0c9e764e11 move docs 2015-10-05 13:33:38 -04:00
Marek Posolda 00cbc22d8b Merge pull request #1674 from girirajsharma/master
[KEYCLOAK-1864] No names for required actions
2015-10-05 08:56:26 +02:00
girirajsharma 0a3de09b5a [KEYCLOAK-1864] No names for required actions 2015-10-04 23:44:44 +05:30
Bill Burke 4e0ad5ac0b Merge pull request #1673 from patriot1burke/master
saml adapter schema and simplifications
2015-10-02 21:16:34 -04:00
Bill Burke 72256fd6ac Merge remote-tracking branch 'upstream/master' 2015-10-02 18:40:05 -04:00
Bill Burke d06237a3fd saml adapter schema and simplifications 2015-10-02 18:39:50 -04:00
Stan Silvert 28fad68486 KEYCLOAK-1882 Also add locale mapper when new realm is created. 2015-10-02 15:01:39 -04:00
Stian Thorgersen 53b86cbace Merge pull request #1671 from stianst/master
KEYCLOAK-1882 Add locale mapper to admin console clients during migra…
2015-10-02 15:09:43 +02:00
Stian Thorgersen a53aebcddf KEYCLOAK-1882 Add locale mapper to admin console clients during migration 2015-10-02 13:43:41 +02:00
Marek Posolda af307c695a Merge pull request #1670 from mposolda/master
KEYCLOAK-1856 KEYCLOAK-1860 Fix onoffswitchvalue directive
2015-10-02 11:58:04 +02:00
mposolda 7816f053a6 KEYCLOAK-1856 KEYCLOAK-1860 Fix onoffswitchvalue directive 2015-10-02 11:09:54 +02:00
Bill Burke ed54ba9064 Merge pull request #1669 from patriot1burke/master
keycloak-common
2015-10-01 16:03:20 -04:00
Bill Burke 8acdaf462b fix arquillian 2015-10-01 15:14:16 -04:00
Bill Burke c5efd34a46 Merge remote-tracking branch 'upstream/master' 2015-10-01 14:28:04 -04:00
Bill Burke 75343986b0 keycloak-common 2015-10-01 14:27:51 -04:00
Stian Thorgersen 424d357c9c Merge pull request #1668 from vramik/master
arquillian-testsuite: fixed org.keycloak.services.ForbiddenException in test log
2015-10-01 16:35:29 +02:00
Stian Thorgersen 56116038d6 Merge pull request #1667 from stianst/fb-fix
KEYCLOAK-1894 Fix login with Facebook missing profile details
2015-10-01 13:37:57 +02:00
Stian Thorgersen c76da8f3b8 Merge pull request #1666 from stianst/migration-fix
Fix db migration not running as latest jpa version wasn't updated
2015-10-01 13:37:49 +02:00
Stian Thorgersen 589eb3206e KEYCLOAK-1894 Fix login with Facebook missing profile details 2015-10-01 11:54:14 +02:00
Stian Thorgersen 5419ec32e4 Fix db migration not running as latest jpa version wasn't updated 2015-10-01 09:01:06 +02:00
Stian Thorgersen c9e0a7a97d Merge pull request #1657 from stianst/zxing
KEYCLOAK-1888
2015-10-01 08:07:43 +02:00
Bill Burke 5b5f99fdfe Merge pull request #1665 from patriot1burke/master
saml wildfly sp/dist
2015-09-30 17:41:41 -04:00
Bill Burke d3bd0a67a7 saml example docs 2015-09-30 16:51:21 -04:00
Bill Burke 2a36185419 Merge remote-tracking branch 'upstream/master' 2015-09-30 16:36:42 -04:00
Bill Burke 76e3c6394c saml sp distro 2015-09-30 16:36:21 -04:00
Thomas Darimont 9e15b20591 KEYCLOAK-1893 - Allow to configure OTP period in admin console.
Added input form that allows to specify the OTP token period
in the `OTP Policy` section of the `Authentication` settings.

Since the value is already backed by the provided `otpPolicyPeriod`
field in the `RealmRepresentation` class we only needed to show the value
in the admin ui.
2015-09-30 21:07:06 +02:00
Scott Rossillo 05bd51ac1c WrappedHttpServletRequest may throw an exception returning cookies
HttpServletRequest.getCookies() may return null
2015-09-30 14:31:15 -04:00
Bill Burke d648ba73de wildfly saml distro 2015-09-30 11:56:21 -04:00
Marek Posolda c6b34f32a1 Merge pull request #1660 from mposolda/master
Fixes
2015-09-30 17:16:44 +02:00
Stian Thorgersen 974c0a50e7 Merge pull request #1659 from stianst/liquibase
KEYCLOAK-1890
2015-09-30 17:05:30 +02:00
Bill Burke 07d3b26722 Merge remote-tracking branch 'upstream/master' 2015-09-30 11:01:55 -04:00
Bill Burke 510b03476f saml distro 2015-09-30 11:01:45 -04:00
mposolda 4f6d3c8dca KEYCLOAK-1815 Reduce info logging 2015-09-30 16:35:56 +02:00
mposolda 95fe2fe74b KEYCLOAK-904 offline tokens - migration 2015-09-30 16:35:56 +02:00
Stian Thorgersen e937216cf7 KEYCLOAK-1888
Upgrade ZXing dependency
2015-09-30 15:03:02 +02:00
Stian Thorgersen fd8d93663e KEYCLOAK-1890
Upgrade to Liquibase 3.4.1
2015-09-30 15:02:30 +02:00
Stian Thorgersen a048cfc102 Fix merge error 2015-09-30 15:00:35 +02:00
Stian Thorgersen 272272634d KEYCLOAK-1889
Upgrade FreeMarker dependency
2015-09-30 14:58:02 +02:00
Stian Thorgersen 01947f46b9 Merge pull request #1655 from stianst/twitter4j
KEYCLOAK-1887 Upgrade Twitter4j dependency
2015-09-30 14:49:24 +02:00
Bill Burke 5ec73a81e9 Merge pull request #1651 from patriot1burke/master
wf saml adapter first iter
2015-09-30 08:39:45 -04:00
vramik 4cba764ac3 add view-realm role to test user for test realm to avoid org.keycloak.services.ForbiddenException in test log 2015-09-30 14:23:24 +02:00
Stian Thorgersen 84b9963609 Merge pull request #1654 from stianst/master
Set product name/version in keycloak-paren pom
2015-09-30 14:21:39 +02:00
Stian Thorgersen 99c216635f KEYCLOAK-1887
Upgrade Twitter4j dependency
2015-09-30 14:08:21 +02:00
Stian Thorgersen 25a6fcc382 Set product name/version in keycloak-paren pom 2015-09-30 13:41:37 +02:00
Michael Gerber acefd3cacd swap import and migrate order 2015-09-30 13:31:22 +02:00
Marek Posolda 15a5c87cc5 Merge pull request #1653 from mposolda/master
KEYCLOAK-904 offline tokens - example, refactoring, polishing
2015-09-30 12:37:18 +02:00
mposolda 3044138e10 Fix compilation errors 2015-09-30 10:51:53 +02:00
mposolda 6fbb8ccf71 KEYCLOAK-904 Offline tokens - model changes, admin console, export/import, docs 2015-09-30 10:51:36 +02:00
mposolda 018866aa81 KEYCLOAK-904 Offline portal example added 2015-09-30 09:23:23 +02:00
Bill Burke 18b2b572ac fix compilation errors 2015-09-29 20:38:10 -04:00
Bill Burke d9e67aa5ee Merge remote-tracking branch 'upstream/master' 2015-09-29 20:26:16 -04:00
Bill Burke e675ce44d5 Merge remote-tracking branch 'upstream/master' 2015-09-29 20:25:28 -04:00
Bill Burke df46a8ea0d Merge pull request #1647 from patriot1burke/master
tomcat 7 and 8 SAML adapter tests
2015-09-29 20:25:19 -04:00
Bill Burke e277d5b55e wf saml adapter 2015-09-29 20:24:59 -04:00
Stian Thorgersen 4bd1d899db Merge pull request #1618 from ssilvert/i18n
KEYCLOAK-1152: i18n using angular-translate
2015-09-29 14:57:24 +02:00
Stian Thorgersen 3e3d92c2e4 Merge pull request #1650 from stianst/client-reg2
KEYCLOAK-1868 Import clients through admin console
2015-09-29 14:12:59 +02:00
Stian Thorgersen 55deedd3b8 KEYCLOAK-1868 Import clients through admin console
KEYCLOAK-1869 Add root url to clients that should be used to resolve relative urls
2015-09-29 12:16:05 +02:00
Stian Thorgersen 8b6251eb23 Merge pull request #1649 from eugene-chow/master
Updated documentation for "Server Installation > Installing Keycloak Server as Root Context"
2015-09-29 08:59:54 +02:00
Stian Thorgersen 35919da0a4 Merge pull request #1645 from mhajas/master
Arquillian testsuite refactoring
2015-09-29 08:59:09 +02:00
Eugene Chow ec018d2739 Updated documentation for "Server Installation > Installing Keycloak Server as Root Context" to work with Keycloak 1.5 2015-09-29 10:32:16 +08:00
Bill Burke b1a23a13d6 jetty saml fixes 2015-09-28 16:30:03 -04:00
Bill Burke 3ebbe96786 Merge remote-tracking branch 'upstream/master' 2015-09-28 16:05:22 -04:00
Bill Burke cfaa4c60c9 jetty saml adapter 2015-09-28 16:05:07 -04:00
Stian Thorgersen e104450fc8 Merge pull request #1648 from girirajsharma/master
[KEYCLOAK-1880] Admin API Doesn't Detect Null Client
2015-09-28 09:06:26 +02:00
girirajsharma c22b0f4da8 [KEYCLOAK-1880] Admin API Doesn't Detect Null Client 2015-09-27 14:57:16 +05:30
Stan Silvert 302d0b58cc Get locale from token via builtin mapper. 2015-09-26 20:11:06 -04:00
Bill Burke 72999f0acb fix tomcat test shutdown 2015-09-25 17:32:19 -04:00
Bill Burke a942322d99 Merge pull request #1646 from patriot1burke/master
tomcat 6 saml adapter
2015-09-25 15:51:37 -04:00
Bill Burke 8902502c4d tomcat8 saml tests 2015-09-25 15:49:40 -04:00
Bill Burke 8d19741f53 tomcat 7 saml adapter 2015-09-25 15:45:16 -04:00
Bill Burke e60549d764 fix poms 2015-09-25 15:17:51 -04:00
Bill Burke 0a42a28eeb Merge remote-tracking branch 'upstream/master' 2015-09-25 15:12:34 -04:00
Bill Burke 88355d7eb4 tomcat6 adapter 2015-09-25 15:12:14 -04:00
mhajas 67db5917ac Merge remote-tracking branch 'upstream/master' 2015-09-25 09:30:58 +02:00
mhajas 8f1daf5d77 Refactoring 2015-09-25 09:10:17 +02:00
Stian Thorgersen 6d5e3b2a17 Merge pull request #1643 from stianst/master
KEYCLOAK-1878
2015-09-25 07:37:23 +02:00
Stian Thorgersen 75c0d5089f KEYCLOAK-1878
Add Base64 to Keycloak core
2015-09-25 07:02:25 +02:00
Tomas Kyjovsky 5b1fcbfc51 Merge pull request #1642 from tkyjovsk/master
FIxed compilation error of arquillian tests by adding keycloak-adapte…
2015-09-24 22:46:29 +02:00
Tomas Kyjovsky 0c80255f3a FIxed compilation error of arquillian tests by adding keycloak-adapter-spi dependency. 2015-09-24 21:57:02 +02:00
Stan Silvert 121f8e9174 Converted some more pages to user ng-translate. 2015-09-24 15:35:37 -04:00
Bill Burke c1cb50b39f Merge pull request #1641 from patriot1burke/master
initial saml sp adapter
2015-09-24 14:23:05 -04:00
Bill Burke 791a740f32 Merge remote-tracking branch 'upstream/master' 2015-09-24 12:05:24 -04:00
Bill Burke 546cdd7d8f fix modules for refactor 2015-09-24 12:05:12 -04:00
Stian Thorgersen 8ef6602f82 Merge pull request #1640 from stianst/master
Removed unused netty dependency from keycloak parent
2015-09-24 09:16:33 +02:00
Stian Thorgersen 2938759db4 Removed unused files from common/lib theme 2015-09-24 08:37:01 +02:00
Stian Thorgersen f7bcca8553 Removed unused netty dependency from keycloak parent 2015-09-24 08:05:34 +02:00
Stian Thorgersen 4eaf893492 Merge pull request #1610 from raehalme/KEYCLOAK-1828
KEYCLOAK-1828 attemptAuthentication throws KeycloakAuthenticationException if authentication fails
2015-09-24 06:32:27 +02:00
Stian Thorgersen 0ba6ab198a Merge pull request #1611 from raehalme/KEYCLOAK-1829
KEYCLOAK-1829 unsuccessfulAuthentication now returns HTTP response status 401 instead of 403
2015-09-24 06:31:33 +02:00
Bill Burke 49a530f2b4 merge 2015-09-23 21:13:42 -04:00
Bill Burke c14d3d7963 merge conflicts 2015-09-23 21:01:47 -04:00
Bill Burke fe26d6ecec more 2015-09-23 20:54:27 -04:00
Bill Burke 35a00b449d all tests 2015-09-23 20:45:20 -04:00
Bill Burke 1e9c09d23a more complete 2015-09-23 17:54:16 -04:00
Stian Thorgersen ec4f8a7f15 Merge pull request #1639 from stianst/master
Make it possible to set hibernate spec artifact id with a property in…
2015-09-23 20:36:58 +02:00
Stian Thorgersen d109bf7b56 Updated release process to use maven release plugin 2015-09-23 15:50:25 +02:00
Stian Thorgersen 4625ab917d Merge pull request #1636 from vramik/master
arquillian-testsuite: Suppress error from GreenMail on shutdown, login settings test coverage
2015-09-23 15:37:12 +02:00
Stian Thorgersen 7d239f8990 Make it possible to set hibernate spec artifact id with a property in parent pom 2015-09-23 15:36:40 +02:00
Marek Posolda 22f7efd977 Merge pull request #1638 from mposolda/master
KEYCLOAK-904 Consents support. Added scopeParamRequired flag to RoleM…
2015-09-23 15:30:36 +02:00
mposolda 2a349673b9 Fix integration-arquillian 2015-09-23 14:47:20 +02:00
Vlasta Ramik 361019fc6a Merge remote-tracking branch 'upstream/master' 2015-09-23 13:07:48 +02:00
vramik abb099745f added test coverage of login settings 2015-09-23 13:07:30 +02:00
mposolda 046edbbd54 KEYCLOAK-904 Consents support. Added scopeParamRequired flag to RoleModel 2015-09-23 12:52:47 +02:00
Stian Thorgersen 8cc4c8c5e2 Merge pull request #1635 from stianst/realm-import
KEYCLOAK-1866
2015-09-23 11:45:56 +02:00
Vlasta Ramik d2d3a3f216 Merge remote-tracking branch 'upstream/master' 2015-09-23 11:23:57 +02:00
vramik cbf5c920ea Suppress error from GreenMail on shutdown 2015-09-23 11:21:48 +02:00
Stian Thorgersen 7ac1d1f14c KEYCLOAK-1866
Allow changing name and view details of imported realm
2015-09-23 11:08:53 +02:00
vramik e811b87679 moved smtp server configuration to suiteContext 2015-09-23 10:50:49 +02:00
Stian Thorgersen d08fca4e0a Merge pull request #1625 from girirajsharma/master
[KEYCLOAK-1787] Confirming password policy values with ENTER key deletes the first item in the table.
2015-09-23 08:33:07 +02:00
Stian Thorgersen 30aa41a2ee Merge pull request #1633 from stianst/update-username
KEYCLOAK-1857 Allow users to edit username on first login
2015-09-23 08:26:03 +02:00
Stian Thorgersen 9d8d690100 KEYCLOAK-1857 Prefill update profile form with username from user or formdata 2015-09-23 07:43:38 +02:00
dcampagna 43541d3028 Show error when username already exists (KEYCLOAK-1857) 2015-09-23 07:43:38 +02:00
dcampagna 880e831e71 Removed comment (KEYCLOAK-1857) 2015-09-23 07:43:38 +02:00
dcampagna fe2278b320 Fix broken tests (KEYCLOAK-1857) 2015-09-23 07:43:38 +02:00
dcampagna f7a8bbbcc8 Allow username change at first login (KEYCLOAK-1857) 2015-09-23 07:43:38 +02:00
dcampagna fde4bc99aa Allow username change at first login (KEYCLOAK-1849) 2015-09-23 07:43:38 +02:00
Bill Burke cc9d6d0cf7 saml undertow sp 2015-09-22 20:27:08 -04:00
Marek Posolda b17bbc9b86 Merge pull request #1634 from pdrozd/sync-ldap-sleep
Added configurable sleep time
2015-09-22 16:18:45 +02:00
Pavel Drozd d4c5349e1a Added configurable sleep time 2015-09-22 15:29:21 +02:00
Bill Burke 2865a3c047 Merge pull request #1626 from dbarentine/master
KEYCLOAK-1861 Allow setting of signature algorithm when signing SAML …
2015-09-22 08:37:46 -04:00
Marek Posolda 522fc7412c Merge pull request #1632 from mposolda/master
KEYCLOAK-904 Offline tokens - step 1
2015-09-21 12:06:33 +02:00
mposolda 7ec3f86efb KEYCLOAK-904 Offline tokens 2015-09-21 10:28:30 +02:00
mposolda c11539cccb docs and javadoc fixes 2015-09-21 10:13:41 +02:00
Stian Thorgersen 09488b8df3 Merge pull request #1629 from tkyjovsk/master-squashed
Updates and refactoring of arquillian testsuite.
2015-09-18 15:12:12 +02:00
Tomas Kyjovsky e16cc493d2 Updates and refactoring of arquillian testsuite. 2015-09-18 14:27:28 +02:00
Stian Thorgersen 379fc8961e Merge pull request #1628 from stianst/master
Configure maven release plugin
2015-09-18 13:24:31 +02:00
Stian Thorgersen 43114f176b Configure maven release plugin 2015-09-18 13:23:54 +02:00
Stian Thorgersen f01d959f7c Merge pull request #1624 from tkyjovsk/serial-versions
Removed occurences of serialVersionUID from all classes.
2015-09-18 13:03:37 +02:00
Stian Thorgersen 28f4409768 Merge pull request #1623 from mstruk/asciidoc
KEYCLOAK-1241 Can't build release with Java 8
2015-09-18 13:03:02 +02:00
Stian Thorgersen 364aecda2a Merge pull request #1627 from stianst/master
KEYCLOAK-1858
2015-09-18 13:02:38 +02:00
Stian Thorgersen 9bfbac6be5 KEYCLOAK-1858
JavaDoc aggregate fails during release if build not already executed
2015-09-18 10:11:51 +02:00
Dane Barentine db20fd9eeb KEYCLOAK-1861 Allow setting of signature algorithm when signing SAML AuthnRequests to IDPs 2015-09-17 15:55:59 -07:00
Giriraj Sharma 53a198fde8 [KEYCLOAK-1787] Confirming password policy values with ENTER key deletes the first item in table 2015-09-17 23:56:17 +05:30
Bill Burke 861a13501a merge 2015-09-17 14:25:16 -04:00
Bill Burke 0f24bd2ea4 merge 2015-09-17 14:06:33 -04:00
Bill Burke 9dc54815eb Merge pull request #1616 from dbarentine/master
Bug fixes
2015-09-17 14:01:13 -04:00
Bill Burke cb8ca619ae saml sp 2015-09-17 14:00:57 -04:00
Tomas Kyjovsky ac91deac96 Removed occurences of serialVersionUID from all classes. 2015-09-17 17:27:39 +02:00
Marko Strukelj 71e2be5d3d KEYCLOAK-1241 Can't build release with Java 8
- Fix Null title in some build environments
2015-09-17 14:10:15 +02:00
Stian Thorgersen 4878073867 Merge pull request #1587 from mstruk/asciidoc
KEYCLOAK-1241 Can't build release with Java 8
2015-09-17 09:06:22 +02:00
Stian Thorgersen dc327ddddb Merge pull request #1621 from stianst/master
KEYCLOAK-1854
2015-09-17 08:36:08 +02:00
Stian Thorgersen e6467403ef Merge pull request #1600 from cfsnyder/master
KEYCLOAK-1807 Fix bug with commas in regex password policies
2015-09-17 08:26:56 +02:00
Stian Thorgersen cf0fab2d66 Merge pull request #1620 from lkubik/unifyJetty8Versions
Unify jetty 8.1 artifacts version with fabric8-bom-1.2.0.redhat-133.pom
2015-09-17 08:23:22 +02:00
Stian Thorgersen 2eaa03539c KEYCLOAK-1854
NPE in SystemInfoRepresentation if user.country or user.language not set
2015-09-17 07:38:37 +02:00
Lukas Kubik b7e49dc88d Unify jetty 8.1 artifacts version with fabric8-bom-1.2.0.redhat-133.pom 2015-09-16 17:14:29 +02:00
Marek Posolda ca05455aa0 Merge pull request #1619 from mstruk/kerberos
KEYCLOAK-1852 Improve Kerberos example documentation
2015-09-16 15:08:50 +02:00
Stian Thorgersen 7ae3eb8321 Merge pull request #1615 from ssilvert/breadcrumbs
Fix breadcrumbs.
2015-09-16 14:16:14 +02:00
Stan Silvert ae54babbbb Update client-credentials-jwt-key-import.html 2015-09-16 07:40:30 -04:00
Stan Silvert a8378fe84b Update client-credentials-jwt-key-export.html 2015-09-16 07:40:14 -04:00
Stian Thorgersen 85df0b6a67 Merge pull request #1613 from raehalme/KEYCLOAK-1832
KEYCLOAK-1832 Added check for null authentication on the logout method
2015-09-16 13:34:51 +02:00
Marko Strukelj 95967b9c79 KEYCLOAK-1852 Improve Kerberos example documentation and user experience 2015-09-16 12:22:56 +02:00
Marko Strukelj 8396b999a2 KEYCLOAK-1241 Can't build release with Java 8
- Speed up build by only building REST API doc during -Pjboss-release
2015-09-16 11:53:53 +02:00
Marko Strukelj 3bbe82057c KEYCLOAK-1241 Can't build release with Java 8
- Improve javadoc comments for new REST API documentation generation
2015-09-15 21:22:43 +02:00
Marko Strukelj 0c49fce78f KEYCLOAK-1241 Can't build release with Java 8 2015-09-15 21:22:43 +02:00
Stian Thorgersen f9af8ba1a0 Merge pull request #1614 from stianst/master
Fixes
2015-09-15 13:40:04 +02:00
Dane Barentine 80f91b5fa5 KEYCLOAK-1848 Fix consuming of metadata when EntityDescriptor includes multiple Descriptors 2015-09-14 15:04:54 -07:00
Dane Barentine 6478e8f5c7 KEYCLOAK-1847 Per SAML Spec 3.4.4.1 SigAlg in redirect binding should be URI not Java signature algorithm 2015-09-14 15:02:27 -07:00
Dane Barentine 55dc42e147 KEYCLOAK-1491 AttributeStatement must contain one or more attribute or encryptedattribute statements 2015-09-14 15:00:41 -07:00
Dane Barentine f55ab0d689 KEYCLOAK-1846 Per SAML spec 6.2 Encrypting assertions must happen after the assertions are signed 2015-09-14 15:00:41 -07:00
Dane Barentine fe79c9b01e KEYCLOAK-1845 Fixed relative path error which was omitting the themes on the EAP overlay 2015-09-14 14:58:56 -07:00
Dane Barentine 6291e90f9c KEYCLOAK-1844 Login endpoint needs to handle POST as well for SAML clients using HTTP-POST binding 2015-09-14 14:57:38 -07:00
Stan Silvert a32fefb597 Fix breadcrumbs. 2015-09-14 14:28:32 -04:00
Cory Snyder 3e04d045ee KEYCLOAK-1807 Fix bug with commas in regex password policies by using alternate way to declare multiple regex patterns 2015-09-11 11:00:31 -04:00
Stian Thorgersen fb4645a3dc KEYCLOAK-1833 Fix error messages for identity brokering 2015-09-10 21:15:55 +02:00
Thomas Raehalme e0eac89e5a Added check for null authentication on the logout method. 2015-09-10 12:30:07 +03:00
Thomas Raehalme 90d34bfd06 unsuccessfulAuthentication now returns HTTP response status 401 instead of 403. 2015-09-09 18:31:25 +03:00
Thomas Raehalme e58b5762f3 attemptAuthentication now throws KeycloakAuthenticationException if authentication fails.
Also authenticationFailureHandler is by default set to SimpleUrlAuthenticationFailureHandler
with default login url set to /sso/login.
2015-09-09 15:45:13 +03:00
Stian Thorgersen 3fd4d23bed Version bump 2015-09-09 11:27:21 +02:00
Marek Posolda 1c38bb7158 Merge pull request #1609 from mposolda/master
KEYCLOAK-1824 ClientIdAndSecretCredentialsProvider not found when dep…
2015-09-08 23:45:04 +02:00
mposolda 149ef706dd KEYCLOAK-1824 ClientIdAndSecretCredentialsProvider not found when deploying Fuse examples 2015-09-08 22:55:43 +02:00
Stan Silvert 75bd8d4627 Load admin messages through Themes. 2015-09-08 15:22:50 -04:00
Marek Posolda f1c40dd345 Merge pull request #1608 from mposolda/master
KEYCLOAK-1826
2015-09-08 21:01:52 +02:00
mposolda 6225ccfc06 KEYCLOAK-1826 2015-09-08 21:00:42 +02:00
Marek Posolda 34de631b2a Merge pull request #1607 from mposolda/master
KEYCLOAK-1821 KEYCLOAK-1825 Migration and export/import of clientAuth…
2015-09-08 20:28:04 +02:00
mposolda 86f0092622 KEYCLOAK-1821 KEYCLOAK-1825 Migration and export/import of clientAuthFlow + resetCredentialsFlow 2015-09-08 19:53:35 +02:00
Stan Silvert e455cbf319 Add new getMessages() method to Theme interface. 2015-09-08 13:28:17 -04:00
Stan Silvert cee2d69718 Update for use with Angualr 1.4 anti-watch feature. Also, limit sanitize
to params.  This avoids issue with Unicode.
2015-09-08 12:57:22 -04:00
Stan Silvert ff17123123 i18n for onoffswitch 2015-09-08 12:57:21 -04:00
Stan Silvert e118a06a09 Bundles now read from base theme instead of from classpath. Bundle names
no longer hard-coded.
2015-09-08 12:57:20 -04:00
Stan Silvert 4898d74c6d KEYCLOAK-1152 Initial commit for i18n support 2015-09-08 12:57:19 -04:00
Marek Posolda 76f3842dad Merge pull request #1606 from mposolda/master
Fix service-account demo app on EAP 6.4
2015-09-08 17:22:29 +02:00
mposolda d818ebdd9e Fix service-account demo app on EAP 6.4 2015-09-08 16:41:27 +02:00
Stian Thorgersen 4d90898dd9 Merge pull request #1605 from stianst/master
KEYCLOAK-1818
2015-09-08 09:56:06 +02:00
Stian Thorgersen 298b9e01d8 KEYCLOAK-1818
Authenticator example doesn't work when deployed as a module
2015-09-08 09:55:45 +02:00
Marek Posolda d0b08cacd8 Merge pull request #1604 from mposolda/master
KEYCLOAK-1811 Pluggable client authentication config through adapter …
2015-09-08 00:12:49 +02:00
mposolda 050c65a520 KEYCLOAK-1811 Pluggable client authentication config through adapter subsystem 2015-09-07 23:30:08 +02:00
Bill Burke be0c359160 adapter refactor 2015-09-07 10:27:57 -04:00
Bill Burke 3f792030d3 adapter refactor 2015-09-07 10:26:25 -04:00
Stian Thorgersen 5c2fc1120b Merge pull request #1603 from stianst/master
KEYCLOAK-1816
2015-09-07 13:32:29 +02:00
Stian Thorgersen 3d2acbe780 KEYCLOAK-1816
LocaleHelper prints info 'Locale en is not supported'
2015-09-07 13:02:52 +02:00
Stian Thorgersen bce0e0ea90 Merge pull request #1602 from stianst/master
Fixes
2015-09-07 10:36:48 +02:00
Stian Thorgersen 931102ff26 KEYCLOAK-1808
Revoke Grant button should disappear
2015-09-07 10:08:32 +02:00
Stian Thorgersen 5a3938d12f KEYCLOAK-1806
oauth-client example fails if you say no to grant
2015-09-07 09:59:32 +02:00
Stian Thorgersen dca1751a63 KEYCLOAK-1812 View user attributes in admin console doesn't work 2015-09-07 09:40:34 +02:00
Stian Thorgersen f6ec9af61e KEYCLOAK-1805
address theme causes exception for login theme
2015-09-07 09:33:34 +02:00
Stian Thorgersen 64f2f84ffa Merge pull request #1599 from stianst/master
KEYCLOAK-1804
2015-09-07 08:51:01 +02:00
Marek Posolda 5df5e53f11 Merge pull request #1601 from mposolda/master
KEYCLOAK-1799 Download adapter JSON config with proper adapter
2015-09-07 08:36:53 +02:00
mposolda 81f4c50574 KEYCLOAK-1799 Download adapter JSON config with proper adapter 2015-09-04 22:23:01 +02:00
Marek Posolda 2550d16127 Merge pull request #1598 from mposolda/master
KEYCLOAK-1801 Additional fix and cleanup
2015-09-04 22:21:37 +02:00
Bill Burke 333ad0efac refactor adapters 2015-09-04 15:56:28 -04:00
Stian Thorgersen f3675681c3 KEYCLOAK-1804
Replace -snapshot with startup time in resource urls
2015-09-04 16:55:32 +02:00
Stian Thorgersen 28de8dc5b7 Merge pull request #1597 from mstruk/KEYCLOAK-1779
KEYCLOAK-1779 NPE due to missing web.xml/jboss-web.xml
2015-09-04 16:14:55 +02:00
mposolda 35e63a9398 KEYCLOAK-1801 Additional fix and cleanup 2015-09-04 15:19:43 +02:00
Stian Thorgersen f23f1cc813 Merge pull request #1596 from stianst/master
KEYCLOAK-1803
2015-09-04 14:22:07 +02:00
Marko Strukelj b0095154d1 KEYCLOAK-1779 NPE due to missing web.xml/jboss-web.xml
- improved code readability and npe fix
2015-09-04 14:18:57 +02:00
Stian Thorgersen 79ea9ed314 KEYCLOAK-1803
On/off switches in mappers doesn't work
2015-09-04 14:17:30 +02:00
Marek Posolda 413db0dce1 Merge pull request #1595 from mposolda/master
Add 'Testsuite' prefix to the dummy providers used for testing only
2015-09-04 13:53:10 +02:00
William DeCoste e6745532ce KEYCLOAK-1779 2015-09-04 13:52:25 +02:00
Stian Thorgersen 59da0f90f8 Merge pull request #1594 from stianst/master
KEYCLOAK-1801
2015-09-04 13:37:32 +02:00
mposolda 76f0f52ee3 Add 'Testsuite' prefix to the dummy providers used for testing only 2015-09-04 13:17:20 +02:00
Stian Thorgersen 73c230f1ca KEYCLOAK-1801
Suggestions to improving client credentials tab
2015-09-04 12:55:25 +02:00
Marek Posolda ddee72c756 Merge pull request #1593 from mposolda/master
KEYCLOAK-1802
2015-09-04 12:46:15 +02:00
mposolda 6318964374 KEYCLOAK-1802 2015-09-04 12:21:45 +02:00
Stian Thorgersen 853f1af40d Merge pull request #1592 from stianst/master
KEYCLOAK-1794 Admin console issues with kc-provider-config directive
2015-09-04 11:43:30 +02:00
Stian Thorgersen d429b2151a KEYCLOAK-1800
Save buttons not aligned correctly on otp-policy and flow-bindings pages
2015-09-04 10:14:55 +02:00
Stian Thorgersen b223e1a7af KEYCLOAK-1794 Admin console issues with kc-provider-config directive 2015-09-04 09:59:48 +02:00
Stian Thorgersen c806b8911e Merge pull request #1590 from stianst/master
KEYCLOAK-1796 Tabs on Keycloak identity provider shown twice
2015-09-04 08:59:16 +02:00
Stian Thorgersen 9f30a51925 KEYCLOAK-1796 Tabs on Keycloak identity provider shown twice 2015-09-04 08:32:00 +02:00
Stian Thorgersen a8b7129269 Merge pull request #1585 from stianst/master
KEYCLOAK-1793 Remove cancel button on login and login-totp
2015-09-04 08:19:27 +02:00
Stian Thorgersen 991b0e8ee2 Merge pull request #1586 from suchabar/bsuchano-branch
My first PR - addition of extra info to Readme file
2015-09-04 08:19:12 +02:00
Marek Posolda e9d1475475 Merge pull request #1588 from mposolda/master
KEYCLOAK-1795 Add just one clientAuthenticatorType per client
2015-09-04 00:35:25 +02:00
mposolda bc189554aa KEYCLOAK-1795 Add just one clientAuthenticatorType per client 2015-09-04 00:09:54 +02:00
suchabar d0f26ae4cf Edited Readme file 2015-09-03 20:46:34 +02:00
suchabar ab6d247ef1 Edited Readme file 2015-09-03 20:43:16 +02:00
Stian Thorgersen fcc82a47e4 KEYCLOAK-1793 Remove cancel button on login and login-totp 2015-09-03 20:21:56 +02:00
Marek Posolda 25e53db96f Merge pull request #1584 from mposolda/master
KEYCLOAK-1760 KEYCLOAK-1697 DB fixes
2015-09-03 12:23:31 +02:00
mposolda 89660d06e5 KEYCLOAK-1697 Fix UserProvider.searchForUsersByAttribute 2015-09-03 11:47:24 +02:00
mposolda 493fd0ad6a KEYCLOAK-1760 Fix DB issues when schema option defined 2015-09-03 11:47:24 +02:00
Stian Thorgersen 11422524f3 Merge pull request #1583 from stianst/master
KEYCLOAK-1497 Success message is not displayed when assigning roles
2015-09-03 09:29:24 +02:00
Stian Thorgersen 957214ed78 KEYCLOAK-1497 Success message is not displayed when assigning roles 2015-09-03 08:52:05 +02:00
Bill Burke f013cca3b8 Merge pull request #1582 from patriot1burke/master
KEYCLOAK-1792
2015-09-02 18:00:35 -04:00
Bill Burke a1cfc0a0ff KEYCLOAK-1792 2015-09-02 17:17:57 -04:00
Bill Burke e8b3b3acf3 Merge pull request #1581 from patriot1burke/master
client session required actions
2015-09-02 17:10:20 -04:00
Bill Burke 0cfb03be03 Merge remote-tracking branch 'upstream/master' 2015-09-02 16:30:35 -04:00
Bill Burke 7d4b93e01e client session required actions 2015-09-02 16:30:16 -04:00
Marek Posolda 2f3793805b Merge pull request #1579 from mposolda/master
MSSQL Fix
2015-09-02 16:59:36 +02:00
mposolda a310c13d32 MSSQL Fix 2015-09-02 16:25:38 +02:00
Stian Thorgersen 38a721425d Merge pull request #1578 from stianst/master
KEYCLOAK-1791 Exception on logout on EAP 6.4 overlay
2015-09-02 15:25:45 +02:00
Marek Posolda dfc34d99c5 Merge pull request #1577 from mposolda/master
KEYCLOAK-1789 KEYCLOAK-1759 Export/import fixes
2015-09-02 14:49:23 +02:00
Stian Thorgersen 6c58fd03a4 KEYCLOAK-1791 Exception on logout on EAP 6.4 overlay 2015-09-02 14:40:43 +02:00
mposolda 5b9d1286cc KEYCLOAK-1789 KEYCLOAK-1759 Export/import fixes 2015-09-02 12:03:16 +02:00
Stian Thorgersen d9e330802c Merge pull request #1576 from jean-merelis/master
aligning translation pt-br with master
2015-09-02 09:25:28 +02:00
Stian Thorgersen 085de8a069 Merge pull request #1571 from ssilvert/ng-upgrade-fix-conflicts
KEYCLOAK-1781: Upgrade AngularJS to version 1.4.4
2015-09-02 09:24:26 +02:00
jean 5af4c63a3e aligning translation pt-br with master 2015-09-01 13:53:01 -03:00
Stian Thorgersen 5177365c28 Merge pull request #1574 from stianst/master
Fix loading resources from theme
2015-09-01 14:06:18 +02:00
Marek Posolda 4df5ff3004 Merge pull request #1573 from mposolda/master
KEYCLOAK-1780 documentation + Generic client authentication screen
2015-09-01 13:58:04 +02:00
Stian Thorgersen 00f6841dc7 Fix loading resources from theme 2015-09-01 13:39:35 +02:00
mposolda be8394158f KEYCLOAK-1780 documentation + Generic client authentication screen 2015-09-01 13:17:14 +02:00
Bill Burke fbf62b2a63 Merge pull request #1572 from patriot1burke/master
more mappers
2015-08-31 20:48:55 -04:00
Bill Burke a047fb947b docs 2015-08-31 16:24:09 -04:00
Bill Burke eec3a3d5c3 more mappers 2015-08-31 16:23:17 -04:00
Stan Silvert 9387de1d1a KEYCLOAK-1781: Upgrade AngularJS to version 1.4.4 2015-08-31 15:09:55 -04:00
Bill Burke b9c90f128a Merge pull request #1570 from patriot1burke/master
KEYCLOAK-1726
2015-08-31 14:46:38 -04:00
Bill Burke 5699efc0f5 KEYCLOAK-1726 2015-08-31 14:46:14 -04:00
Bill Burke 6ead008bf4 Merge pull request #1569 from patriot1burke/master
KEYCLOAK-1721
2015-08-31 13:18:08 -04:00
Bill Burke 34e52839f7 KEYCLOAK-1721 2015-08-31 13:17:45 -04:00
Bill Burke bd54e1c60c Merge pull request #1568 from patriot1burke/master
docs
2015-08-31 10:55:25 -04:00
Bill Burke 03006522e2 docs 2015-08-31 10:54:57 -04:00
Bill Burke 7492ae2990 Merge pull request #1567 from patriot1burke/master
refactor recover password
2015-08-31 10:53:29 -04:00
Bill Burke 6edf890699 Merge pull request #1549 from ahus1/ahus1_jetty_contenttype
KEYCLOAK-1776 / JettySessionTokenStore sets content type on restoring form values
2015-08-31 10:34:16 -04:00
Bill Burke 43fd24f02b Merge remote-tracking branch 'upstream/master' 2015-08-31 10:13:55 -04:00
Bill Burke 22ebb81650 refactor recover password 2015-08-31 10:13:42 -04:00
Bill Burke fd074278f7 Merge pull request #1566 from bdecoste/master
KEYCLOAK-1783
2015-08-30 08:50:47 -04:00
William DeCoste ad497a66cd KEYCLOAK-1783 2015-08-29 08:57:04 -07:00
Bill Burke 41275b0e91 Merge pull request #1564 from patriot1burke/master
KEYCLOAK-1375
2015-08-27 14:56:53 -04:00
Bill Burke b82502af1d KEYCLOAK-1375 2015-08-27 14:15:47 -04:00
Bill Burke 43f2199d46 Merge pull request #1561 from velias/KEYCLOAK-1739
KEYCLOAK-1739 - correct handling of diacritics from http request in KeycloakServer
2015-08-27 09:06:42 -04:00
Bill Burke d44541fc9e Merge pull request #1560 from girirajsharma/master
[KEYCLOAK-1767] Clients table is unsorted
2015-08-27 09:06:05 -04:00
Bill Burke 24147a3d84 Merge pull request #1562 from velias/KEYCLOAK-1741
KEYCLOAK-1741 - Login form keeps "Username or email" field value after reshown due validation error
2015-08-27 09:05:40 -04:00
Vlastimil Elias 244d879d00 KEYCLOAK-1741 - Login form keeps "Username or email" field value after
reshown due validation error
2015-08-26 15:39:41 +02:00
Vlastimil Elias f5f67a629e KEYCLOAK-1739 - correct handling of diacritics from http request in
KeycloakServer
2015-08-26 14:58:37 +02:00
Alexander Schwartz aad1d57502 KEYCLOAK-1776 / check content type on form submit 2015-08-25 17:35:10 +02:00
giriraj sharma cf75c2378f [KEYCLOAK-1767] Clients table is unsorted 2015-08-23 21:03:06 +05:30
Bill Burke 3a64c4d582 Merge pull request #1543 from raehalme/KEYCLOAK-1775
KEYCLOAK-1775 Basic auth no longer redirects on Spring Security
2015-08-21 21:06:00 -04:00
Bill Burke d36376ffcd Merge pull request #1559 from patriot1burke/master
totp and profile refactor
2015-08-21 20:59:51 -04:00
Bill Burke 434197c10d Merge remote-tracking branch 'upstream/master' 2015-08-21 18:30:52 -04:00
Bill Burke d4af694c6f refactor profile and totp update 2015-08-21 18:30:39 -04:00
Bill Burke f245b67036 totp refactor 2015-08-21 17:53:26 -04:00
Bill Burke 945673c7da Merge pull request #1558 from patriot1burke/master
refactor update password
2015-08-21 17:27:42 -04:00
Bill Burke c25967bd61 fix 2015-08-21 17:01:29 -04:00
Bill Burke 165fba6b9c refactor update password 2015-08-21 15:17:01 -04:00
Marek Posolda 76209dd899 Merge pull request #1555 from mposolda/master
KEYCLOAK-1295 Fixes and javadoc
2015-08-21 20:41:21 +02:00
Bill Burke 8c8cc53989 Merge pull request #1556 from patriot1burke/master
document bypassing CORS
2015-08-21 13:26:44 -04:00
Bill Burke 6f463196ef Merge pull request #1554 from patriot1burke/master
adapter fixes
2015-08-21 13:21:02 -04:00
mposolda b0e2624343 KEYCLOAK-1295 Fixes and javadoc 2015-08-21 19:00:31 +02:00
Bill Burke 99fda3a7cb document bypassing CORS 2015-08-21 11:43:13 -04:00
Bill Burke 457039d7ba fix NPE in adapter for invalid cors requests 2015-08-21 11:29:38 -04:00
Bill Burke eb4ffbca29 co-existence of bearer and basic auth 2015-08-21 11:02:56 -04:00
Marek Posolda c9afe8fcc4 Merge pull request #1553 from mposolda/master
KEYCLOAK-1295 Adapter support. Fixes
2015-08-21 09:20:49 +02:00
mposolda d8d6348f67 KEYCLOAK-1295 Adapter support. Fixes 2015-08-21 08:26:12 +02:00
mposolda 87f7ec5909 KEYCLOAK-1561 LDAPDn.getParentDn() return value is not a DN 2015-08-21 08:26:12 +02:00
mposolda 18583eb6ed Fix mongo 2015-08-21 08:26:12 +02:00
Bill Burke b9d0219f04 Merge pull request #1552 from patriot1burke/master
change reset password
2015-08-20 18:52:07 -04:00
Bill Burke d9cb1fc4a9 Merge remote-tracking branch 'upstream/master' 2015-08-20 17:43:54 -04:00
Bill Burke 1654be0a85 change reset password 2015-08-20 17:43:37 -04:00
Stian Thorgersen d5944163d6 Merge pull request #1551 from stianst/master
KEYCLOAK-1761 Remove address from registration and account management
2015-08-20 17:19:47 +02:00
Stian Thorgersen 5ca3a48094 KEYCLOAK-1723 Allow aud to be single field or array 2015-08-20 15:55:52 +02:00
Stian Thorgersen 1fb3d7cd3b KEYCLOAK-1161
web.xml example in the doc is incorrect
2015-08-20 13:40:35 +02:00
Stian Thorgersen f827b2dc0d KEYCLOAK-1130
security-deployment vs. secure-deployment in the documentation
2015-08-20 13:37:50 +02:00
Stian Thorgersen 0295824923 KEYCLOAK-1747
Deal with time inconsistency in keycloak.js
2015-08-20 13:29:32 +02:00
Stian Thorgersen 8fee0c946b Merge pull request #1550 from mstruk/KEYCLOAK-1777
KEYCLOAK-1777 Column \"USERFEDERA0_.REALMENTITY_ID\" not found ...
2015-08-20 12:26:13 +02:00
Stian Thorgersen bd13b8a5fe KEYCLOAK-1761 Remove address from registration and account management
KEYCLOAK-1762 Add example theme that adds address fields to registration, account management and admin console
2015-08-20 12:25:26 +02:00
Stian Thorgersen 743ea95a78 Upgraded instructions to upgrade OpenShift cartridge 2015-08-19 15:56:44 +02:00
Marko Strukelj 2998a0fa35 KEYCLOAK-1777 Column \"USERFEDERA0_.REALMENTITY_ID\" not found on Wildfly 10.0.0.Beta1 2015-08-18 18:10:39 +02:00
Alexander Schwartz 7b0a3989e2 JettySessionTokenStore sets content type on restoring form values
Closes: KEYCLOAK-1776
2015-08-18 15:32:27 +02:00
Stian Thorgersen 06fcb7595a Merge pull request #1548 from stianst/master
Updated Docker hub release instructions
2015-08-18 15:21:53 +02:00
Stian Thorgersen bd3c4d4215 Updated Docker hub release instructions 2015-08-18 15:21:32 +02:00
Stian Thorgersen b969d9edfa Merge pull request #1547 from cainj13/master
add missing tag start type to sample jboss configuration in docbook
2015-08-18 14:46:38 +02:00
Josh Cain 3ef0fb63a9 add missing tag start type to sample jboss configuration in docbook 2015-08-18 08:43:28 -04:00
Stian Thorgersen bf706a9191 Merge pull request #1546 from stianst/master
Updated release process docs
2015-08-18 14:42:55 +02:00
Stian Thorgersen 26be615a80 Updated release process to include updating openshit cartridge and docker images 2015-08-18 14:10:13 +02:00
Stian Thorgersen 81928eb61a Updated release process docs 2015-08-18 13:48:21 +02:00
Marek Posolda 126f517520 Merge pull request #1545 from mposolda/master
KEYCLOAK-1295 pluggable client authentication. Support authenticate c…
2015-08-18 10:54:01 +02:00
mposolda 7028496601 KEYCLOAK-1295 pluggable client authentication. Support authenticate clients with signed JWT 2015-08-17 23:21:23 +02:00
Thomas Raehalme 3a4897c7d2 Separated the error message for Bearer token and Basic authentication failures. 2015-08-17 22:36:59 +03:00
Thomas Raehalme b3f142d715 KeycloakAuthenticationProcessingFilter now handles Basic Authentication the same way as Bearer token. 2015-08-17 18:05:49 +03:00
Stian Thorgersen a4e16ca9c7 Merge pull request #1540 from ssilvert/master
Fix typos in doc.
2015-08-17 10:09:19 +02:00
Bill Burke 57176dee75 Merge pull request #1542 from patriot1burke/master
oops, .info messages
2015-08-16 17:28:30 -04:00
Bill Burke f87ba8a3a9 oops, .info messages 2015-08-16 17:28:07 -04:00
Bill Burke 8c0b33f902 Merge pull request #1541 from patriot1burke/master
reset password refactor
2015-08-16 17:26:49 -04:00
Bill Burke 51e927adf7 Merge remote-tracking branch 'upstream/master' 2015-08-16 16:41:08 -04:00
Bill Burke bf4b681506 tests 2015-08-16 16:40:39 -04:00
Bill Burke 3c88d2cc18 finish refactor 2015-08-16 15:38:00 -04:00
Bill Burke c7b5975ac1 reset password refactor 2015-08-16 15:20:16 -04:00
Stan Silvert 09901997c1 Fix typos in doc. 2015-08-16 14:59:31 -04:00
Bill Burke c0f3d851db reset password refactor/flow 2015-08-16 12:23:15 -04:00
Bill Burke 98b6344f03 Merge pull request #1539 from patriot1burke/master
fix holes
2015-08-15 11:37:20 -04:00
Bill Burke e4b6e4c167 Merge pull request #1523 from velias/KEYCLOAK-1731
KEYCLOAK-1731 - patched user attribute handling for update profile action
2015-08-15 11:30:22 -04:00
Bill Burke d6983e829a Merge remote-tracking branch 'upstream/master' 2015-08-15 10:39:44 -04:00
Bill Burke 374a2ad957 fix holes 2015-08-15 10:39:33 -04:00
Bill Burke 52fd2d7e75 Merge pull request #1538 from patriot1burke/master
refactor auth-spi, auth demo, and docs
2015-08-14 15:14:00 -04:00
Bill Burke 25bb0ade1b Merge remote-tracking branch 'upstream/master' 2015-08-14 14:39:10 -04:00
Bill Burke 6d7be80930 refactor auth-spi, auth demo, and docs 2015-08-14 14:38:59 -04:00
Bill Burke 1f13f6372a register required action 2015-08-14 12:03:37 -04:00
Bill Burke 39fcd84d53 Merge pull request #1537 from patriot1burke/master
auth spi docs and refactor
2015-08-14 08:53:21 -04:00
Bill Burke d11a83d6e2 stuff 2015-08-13 15:32:58 -04:00
Bill Burke 1978e23cfd Merge pull request #1536 from patriot1burke/master
auth spi docs and refactor
2015-08-13 13:47:24 -04:00
Bill Burke 4cc1a774df Merge remote-tracking branch 'upstream/master' 2015-08-13 13:02:27 -04:00
Bill Burke 8a23463328 auth spi refactor and doco 2015-08-13 11:28:11 -04:00
Stian Thorgersen fad2913665 Merge pull request #1535 from stianst/master
Remove user session entities from persistence.xml
2015-08-13 13:38:59 +02:00
Stian Thorgersen c4c27973f3 Remove user session entities from persistence.xml 2015-08-13 10:33:18 +02:00
Stian Thorgersen 2ae733bd07 Merge pull request #1534 from stianst/master
KEYCLOAK-1703 Remove jpa and mongo user session providers
2015-08-13 10:32:25 +02:00
Stian Thorgersen 7665b9f81e KEYCLOAK-1703 Remove jpa and mongo user session providers 2015-08-13 08:57:37 +02:00
Stian Thorgersen 248322c748 Merge pull request #1533 from stianst/master
KEYCLOAK-1702 Removed mem and none realm and user cache
2015-08-13 08:24:13 +02:00
Bill Burke 523bdd5ec9 doco 2015-08-12 20:37:51 -04:00
Stian Thorgersen a8ad00156b KEYCLOAK-1702 Removed mem and none realm and user cache 2015-08-12 16:55:23 +02:00
Stian Thorgersen 8f820713fa Merge pull request #1530 from lkubik/multipleDependencyDeclaration
Remove multiple declaration of jboss-logging dependency
2015-08-12 13:00:54 +02:00
Stian Thorgersen fc7d4b072c Merge pull request #1526 from mstruk/WF10
KEYCLOAK-1745 Keycloak fails to start on Wildfly 10.0.0.Alpha6
2015-08-12 11:51:11 +02:00
Bill Burke 1801526f65 auth spi doco 2015-08-11 17:44:06 -04:00
Bill Burke 58e37b6a3f Merge pull request #1532 from patriot1burke/master
refactor requiredactions, start doco
2015-08-11 13:52:07 -04:00
Bill Burke 0bd9cad6ad Merge remote-tracking branch 'upstream/master' 2015-08-11 13:04:51 -04:00
Bill Burke bcc2c893ef refactor requiredactions, start doco 2015-08-11 13:04:40 -04:00
Lukas Kubik ac71bbd4b5 Remove multiple declaration of jboss-logging dependency from testsuit/tomcat6/pom.xml 2015-08-10 15:16:28 +02:00
Stian Thorgersen ae94b30066 Merge pull request #1529 from grange74/KEYCLOAK-1724
KEYCLOAK-1724: Removed second security-constraint as it stops Tomcat from redirecting to Keycloak
2015-08-10 15:11:01 +02:00
nick.grange b3c307affe Removed second security-constraint as it seems to stop Tomcat from
redirecting users that aren’t logged in to Keycloak. Also added missing
tag start.
2015-08-10 22:27:52 +10:00
Bill Burke 03d3f4229e Merge pull request #1528 from patriot1burke/master
auth spi javadoc
2015-08-09 15:51:55 -04:00
Bill Burke c627b83cc5 Merge remote-tracking branch 'upstream/master' 2015-08-09 15:06:37 -04:00
Bill Burke 5469db311d document auth spi 2015-08-09 15:06:24 -04:00
Bill Burke 75793a36cf Merge pull request #1527 from patriot1burke/master
binding custom flows
2015-08-07 21:26:46 -04:00
Bill Burke d68603e4ea Merge remote-tracking branch 'upstream/master' 2015-08-07 19:00:19 -04:00
Bill Burke 33e402e7be binding custom flows 2015-08-07 19:00:07 -04:00
Marko Strukelj 375dce14e6 KEYCLOAK-1745 Keycloak fails to start on Wildfly 10.0.0.Alpha6 2015-08-07 14:56:14 +02:00
Bill Burke 08ae3aee50 Merge pull request #1525 from patriot1burke/master
hotp and otp policy
2015-08-06 17:43:46 -04:00
Bill Burke 1ad7d4f1d8 Merge remote-tracking branch 'upstream/master' 2015-08-06 16:55:16 -04:00
Bill Burke f9e8f1f7b7 hotp 2015-08-06 16:54:59 -04:00
Marek Posolda fa0b45625c Merge pull request #1524 from mposolda/master
Minor clustering improvements
2015-08-06 18:05:40 +02:00
mposolda c5459b2614 Update docker-cluster to keycloak 1.4 2015-08-06 17:29:08 +02:00
mposolda 8232773d97 Log more details about possible error in UserInfoEndpoint 2015-08-06 17:28:35 +02:00
Bill Burke 53b752ccfe Merge remote-tracking branch 'upstream/master' 2015-08-05 20:40:02 -04:00
Bill Burke 07efba364e hotp 2015-08-05 20:39:47 -04:00
Vlastimil Elias 2e52d8ea7a KEYCLOAK-1731 - patched user attribute handling for
login-update-profile.ftl form. Relevant tests added. Tests for user
attributes handling from register.ftl also added.
2015-08-05 17:07:21 +02:00
Marek Posolda a46a7a42a1 Merge pull request #1522 from mposolda/master
Clustering docs and distribution fixes
2015-08-05 13:34:39 +02:00
mposolda 060a193b48 KEYCLOAK-1732 Fix standalone.xml in demo distribution 2015-08-05 13:33:11 +02:00
mposolda 06ee06ae50 Update clustering docs as infinispan is default provider now 2015-08-05 13:32:40 +02:00
Marek Posolda 17a5a9f033 Merge pull request #1521 from mposolda/master
KEYCLOAK-1595 Don't send 401 from AuthorizeClientUtil if public clien…
2015-08-04 16:01:17 +02:00
mposolda e27a754f5f KEYCLOAK-1595 Don't send 401 from AuthorizeClientUtil if public client sent client_id parameter together with Authorization: Negotiate 2015-08-04 15:22:03 +02:00
Bill Burke 61d5ba6a92 Merge pull request #1520 from patriot1burke/master
fix javascript flo bug
2015-08-04 09:04:18 -04:00
Bill Burke eff0054b4a fix bug 2015-08-04 09:03:49 -04:00
Marek Posolda 99cd6c7383 Merge pull request #1519 from mposolda/master
LDAP & migration fixes
2015-08-04 14:14:56 +02:00
mposolda 5087392162 KEYCLOAK-1725 Fix migration from 1.1.0.Final on Oracle 2015-08-04 13:21:09 +02:00
mposolda 7474a31d95 KEYCLOAK-1562 better error reporting when missing UUID on ldap user record 2015-08-04 13:21:09 +02:00
mposolda a0197bc9da KEYCLOAK-1728 NPE during LDAP sync when some LDAP user doesn't have username 2015-08-04 13:21:09 +02:00
Bill Burke 3b2e679aed Merge pull request #1518 from patriot1burke/master
auth flow editing
2015-08-03 19:26:11 -04:00
Bill Burke 75d69a1ec1 Merge pull request #1516 from pfiled/proxy-header-inject-bug
Populate the KEYCLOAK_USERNAME header
2015-08-03 18:59:32 -04:00
Bill Burke 930fc66ebf flow editing 2015-08-03 18:58:14 -04:00
Bill Burke 04d3d26cb1 refactor execution model 2015-08-03 09:52:56 -04:00
Bill Burke de940ccff9 auth flow editing 2015-08-02 19:03:33 -04:00
Daniel Pfile aedc54cc89 Populate the KEYCLOAK_USERNAME header, this fixes the authenticate and roles-allowed constraints in the proxy. 2015-07-30 16:24:16 -05:00
Stian Thorgersen de3a776b9a Merge pull request #1515 from stianst/master
KEYCLOAK-1702 KEYCLOAK-1703 Make Infinispan default user session and …
2015-07-29 13:07:09 +02:00
Stian Thorgersen 5d6cc61d4d KEYCLOAK-1702 KEYCLOAK-1703 Remove mem user session provider 2015-07-29 12:02:27 +02:00
Stian Thorgersen f32b38cdbc KEYCLOAK-1702 KEYCLOAK-1703 Make Infinispan default user session and cache provider 2015-07-29 10:08:15 +02:00
Stian Thorgersen f3bfb06dec Version bump 2015-07-28 10:20:40 +02:00
3349 changed files with 155496 additions and 147665 deletions

No files matched your search

+3 -9
View File
@@ -3,17 +3,11 @@ language: java
jdk:
- oraclejdk8
cache:
directories:
- $HOME/.m2
before_cache:
- rm -rf $HOME/.m2/repository/org/keycloak
install: mvn install -Pdistribution -DskipTests=true -B -V
install:
- travis_wait mvn install -Pdistribution -DskipTests=true -B -V -q
script:
- mvn test -B
- mvn -file testsuite/integration-arquillian test -B
- mvn -file testsuite/integration-arquillian test -B -Pno-console
sudo: false
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.4.0.Final</version>
<version>1.7.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -92,4 +92,9 @@ public abstract class AbstractIdentityProvider<C extends IdentityProviderModel>
public void updateBrokeredUser(KeycloakSession session, RealmModel realm, UserModel user, BrokeredIdentityContext context) {
}
@Override
public IdentityProviderDataMarshaller getMarshaller() {
return new DefaultDataMarshaller();
}
}
@@ -1,10 +1,10 @@
package org.keycloak.broker.provider;
import org.keycloak.broker.provider.IdentityProviderMapper;
import org.keycloak.models.IdentityProviderMapperModel;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserModel;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
@@ -35,4 +35,9 @@ public abstract class AbstractIdentityProviderMapper implements IdentityProvider
public void preprocessFederatedIdentity(KeycloakSession session, RealmModel realm, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
}
@Override
public void importNewUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
}
}
@@ -17,9 +17,14 @@
*/
package org.keycloak.broker.provider;
import org.keycloak.models.ClientSessionModel;
import org.keycloak.models.Constants;
import org.keycloak.models.IdentityProviderModel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -43,6 +48,7 @@ public class BrokeredIdentityContext {
private IdentityProviderModel idpConfig;
private IdentityProvider idp;
private Map<String, Object> contextData = new HashMap<>();
private ClientSessionModel clientSession;
public BrokeredIdentityContext(String id) {
if (id == null) {
@@ -150,6 +156,22 @@ public class BrokeredIdentityContext {
this.contextData = contextData;
}
// Set the attribute, which will be available on "Update profile" page and in authenticators
public void setUserAttribute(String attributeName, String attributeValue) {
List<String> list = new ArrayList<>();
list.add(attributeValue);
getContextData().put(Constants.USER_ATTRIBUTES_PREFIX + attributeName, list);
}
public String getUserAttribute(String attributeName) {
List<String> userAttribute = (List<String>) getContextData().get(Constants.USER_ATTRIBUTES_PREFIX + attributeName);
if (userAttribute == null || userAttribute.isEmpty()) {
return null;
} else {
return userAttribute.get(0);
}
}
public String getFirstName() {
return firstName;
}
@@ -166,6 +188,14 @@ public class BrokeredIdentityContext {
this.lastName = lastName;
}
public ClientSessionModel getClientSession() {
return clientSession;
}
public void setClientSession(ClientSessionModel clientSession) {
this.clientSession = clientSession;
}
public void setName(String name) {
if (name != null) {
int i = name.lastIndexOf(' ');
@@ -0,0 +1,46 @@
package org.keycloak.broker.provider;
import java.io.IOException;
import java.util.List;
import org.keycloak.common.util.Base64Url;
import org.keycloak.util.JsonSerialization;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class DefaultDataMarshaller implements IdentityProviderDataMarshaller {
@Override
public String serialize(Object value) {
if (value instanceof String) {
return (String) value;
} else {
try {
byte[] bytes = JsonSerialization.writeValueAsBytes(value);
return Base64Url.encode(bytes);
} catch (IOException ioe) {
throw new RuntimeException(ioe);
}
}
}
@Override
public <T> T deserialize(String serialized, Class<T> clazz) {
try {
if (clazz.equals(String.class)) {
return clazz.cast(serialized);
} else {
byte[] bytes = Base64Url.decode(serialized);
if (List.class.isAssignableFrom(clazz)) {
List list = JsonSerialization.readValue(bytes, List.class);
return clazz.cast(list);
} else {
return JsonSerialization.readValue(bytes, clazz);
}
}
} catch (IOException ioe) {
throw new RuntimeException(ioe);
}
}
}
@@ -0,0 +1,89 @@
package org.keycloak.broker.provider;
import org.keycloak.models.ClientModel;
import org.keycloak.models.IdentityProviderMapperModel;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
import org.keycloak.models.RoleModel;
import org.keycloak.models.UserModel;
import org.keycloak.provider.ProviderConfigProperty;
import java.util.ArrayList;
import java.util.List;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class HardcodedAttributeMapper extends AbstractIdentityProviderMapper {
public static final String ATTRIBUTE = "attribute";
public static final String ATTRIBUTE_VALUE = "attribute.value";
protected static final List<ProviderConfigProperty> configProperties = new ArrayList<ProviderConfigProperty>();
static {
ProviderConfigProperty property;
property = new ProviderConfigProperty();
property.setName(ATTRIBUTE);
property.setLabel("User Attribute");
property.setHelpText("Name of user attribute you want to hardcode");
property.setType(ProviderConfigProperty.STRING_TYPE);
configProperties.add(property);
property = new ProviderConfigProperty();
property.setName(ATTRIBUTE_VALUE);
property.setLabel("User Attribute Value");
property.setHelpText("Value you want to hardcode");
property.setType(ProviderConfigProperty.STRING_TYPE);
configProperties.add(property);
}
@Override
public List<ProviderConfigProperty> getConfigProperties() {
return configProperties;
}
@Override
public String getDisplayCategory() {
return "Attribute Importer";
}
@Override
public String getDisplayType() {
return "Hardcoded Attribute";
}
public static final String[] COMPATIBLE_PROVIDERS = {ANY_PROVIDER};
public static final String PROVIDER_ID = "hardcoded-attribute-idp-mapper";
@Override
public String getId() {
return PROVIDER_ID;
}
@Override
public String[] getCompatibleProviders() {
return COMPATIBLE_PROVIDERS;
}
@Override
public void preprocessFederatedIdentity(KeycloakSession session, RealmModel realm, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
String attribute = mapperModel.getConfig().get(ATTRIBUTE);
String attributeValue = mapperModel.getConfig().get(ATTRIBUTE_VALUE);
context.setUserAttribute(attribute, attributeValue);
}
@Override
public void updateBrokeredUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
String attribute = mapperModel.getConfig().get(ATTRIBUTE);
String attributeValue = mapperModel.getConfig().get(ATTRIBUTE_VALUE);
user.setSingleAttribute(attribute, attributeValue);
}
@Override
public String getHelpText() {
return "When user is imported from provider, hardcode a value to a specific user attribute.";
}
}
@@ -0,0 +1,87 @@
package org.keycloak.broker.provider;
import org.keycloak.models.IdentityProviderMapperModel;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserModel;
import org.keycloak.provider.ProviderConfigProperty;
import java.util.ArrayList;
import java.util.List;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class HardcodedUserSessionAttributeMapper extends AbstractIdentityProviderMapper {
public static final String ATTRIBUTE = "attribute";
public static final String ATTRIBUTE_VALUE = "attribute.value";
protected static final List<ProviderConfigProperty> configProperties = new ArrayList<ProviderConfigProperty>();
static {
ProviderConfigProperty property;
property = new ProviderConfigProperty();
property.setName(ATTRIBUTE);
property.setLabel("User Session Attribute");
property.setHelpText("Name of user session attribute you want to hardcode");
property.setType(ProviderConfigProperty.STRING_TYPE);
configProperties.add(property);
property = new ProviderConfigProperty();
property.setName(ATTRIBUTE_VALUE);
property.setLabel("User Session Attribute Value");
property.setHelpText("Value you want to hardcode");
property.setType(ProviderConfigProperty.STRING_TYPE);
configProperties.add(property);
}
@Override
public List<ProviderConfigProperty> getConfigProperties() {
return configProperties;
}
@Override
public String getDisplayCategory() {
return "Attribute Importer";
}
@Override
public String getDisplayType() {
return "Hardcoded User Session Attribute";
}
public static final String[] COMPATIBLE_PROVIDERS = {ANY_PROVIDER};
public static final String PROVIDER_ID = "hardcoded-user-session-attribute-idp-mapper";
@Override
public String getId() {
return PROVIDER_ID;
}
@Override
public String[] getCompatibleProviders() {
return COMPATIBLE_PROVIDERS;
}
@Override
public void preprocessFederatedIdentity(KeycloakSession session, RealmModel realm, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
String attribute = mapperModel.getConfig().get(ATTRIBUTE);
String attributeValue = mapperModel.getConfig().get(ATTRIBUTE_VALUE);
context.getClientSession().setUserSessionNote(attribute, attributeValue);
}
@Override
public void updateBrokeredUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
String attribute = mapperModel.getConfig().get(ATTRIBUTE);
String attributeValue = mapperModel.getConfig().get(ATTRIBUTE_VALUE);
context.getClientSession().setUserSessionNote(attribute, attributeValue);
}
@Override
public String getHelpText() {
return "When user is imported from provider, hardcode a value to a specific user session attribute.";
}
}
@@ -103,4 +103,10 @@ public interface IdentityProvider<C extends IdentityProviderModel> extends Provi
*/
Response export(UriInfo uriInfo, RealmModel realm, String format);
/**
* Implementation of marshaller to serialize/deserialize attached data to Strings, which can be saved in clientSession
* @return
*/
IdentityProviderDataMarshaller getMarshaller();
}
@@ -0,0 +1,12 @@
package org.keycloak.broker.provider;
/**
*
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public interface IdentityProviderDataMarshaller {
String serialize(Object obj);
<T> T deserialize(String serialized, Class<T> clazz);
}
@@ -20,8 +20,10 @@ public interface IdentityProviderMapper extends Provider, ProviderFactory<Identi
String getDisplayType();
/**
* Called to determine what keycloak username and email to use to process the login request from the external IDP
* Usually used to map BrokeredIdentityContet.username or email.
* Called to determine what keycloak username and email to use to process the login request from the external IDP.
* It's called before "FirstBrokerLogin" flow, so can be used to map attributes to BrokeredIdentityContext ( BrokeredIdentityContext.setUserAttribute ),
* which will be available on "Review Profile" page and in authenticators during FirstBrokerLogin flow
*
*
* @param session
* @param realm
@@ -31,7 +33,7 @@ public interface IdentityProviderMapper extends Provider, ProviderFactory<Identi
void preprocessFederatedIdentity(KeycloakSession session, RealmModel realm, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context);
/**
* Called after UserModel is created for first time for this user.
* Called after UserModel is created for first time for this user. Called after "FirstBrokerLogin" flow
*
* @param session
* @param realm
@@ -1 +1,3 @@
org.keycloak.broker.provider.HardcodedRoleMapper
org.keycloak.broker.provider.HardcodedRoleMapper
org.keycloak.broker.provider.HardcodedAttributeMapper
org.keycloak.broker.provider.HardcodedUserSessionAttributeMapper
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.4.0.Final</version>
<version>1.7.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -20,7 +20,7 @@ package org.keycloak.broker.oidc;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.jboss.logging.Logger;
import org.keycloak.ClientConnection;
import org.keycloak.common.ClientConnection;
import org.keycloak.OAuth2Constants;
import org.keycloak.broker.provider.util.SimpleHttp;
import org.keycloak.broker.provider.AbstractIdentityProvider;
@@ -5,6 +5,7 @@ import org.keycloak.broker.provider.BrokeredIdentityContext;
import org.keycloak.constants.AdapterConstants;
import org.keycloak.events.EventBuilder;
import org.keycloak.jose.jws.JWSInput;
import org.keycloak.jose.jws.JWSInputException;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserSessionModel;
import org.keycloak.representations.AccessTokenResponse;
@@ -51,7 +52,13 @@ public class KeycloakOIDCIdentityProvider extends OIDCIdentityProvider {
@POST
@Path(AdapterConstants.K_LOGOUT)
public Response backchannelLogout(String input) {
JWSInput token = new JWSInput(input);
JWSInput token = null;
try {
token = new JWSInput(input);
} catch (JWSInputException e) {
logger.warn("Failed to verify logout request");
return Response.status(400).build();
}
PublicKey key = getExternalIdpKey();
if (key != null) {
if (!verify(token, key)) {
@@ -29,6 +29,7 @@ import org.keycloak.events.Errors;
import org.keycloak.events.EventBuilder;
import org.keycloak.events.EventType;
import org.keycloak.jose.jws.JWSInput;
import org.keycloak.jose.jws.JWSInputException;
import org.keycloak.jose.jws.crypto.RSAProvider;
import org.keycloak.models.ClientSessionModel;
import org.keycloak.models.RealmModel;
@@ -42,7 +43,7 @@ import org.keycloak.services.messages.Messages;
import org.keycloak.services.resources.IdentityBrokerService;
import org.keycloak.services.resources.RealmsResource;
import org.keycloak.util.JsonSerialization;
import org.keycloak.util.PemUtils;
import org.keycloak.common.util.PemUtils;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@@ -282,41 +283,41 @@ public class OIDCIdentityProvider extends AbstractOAuth2IdentityProvider<OIDCIde
throw new IdentityBrokerException("No token from server.");
}
JsonWebToken token;
try {
JWSInput jws = new JWSInput(encodedToken);
if (!verify(jws, key)) {
throw new IdentityBrokerException("token signature validation failed");
}
JsonWebToken token = jws.readJsonContent(JsonWebToken.class);
String aud = token.getAudience();
String iss = token.getIssuer();
if (aud != null && !aud.equals(getConfig().getClientId())) {
throw new IdentityBrokerException("Wrong audience from token.");
}
if (!token.isActive()) {
throw new IdentityBrokerException("Token is no longer valid");
}
String trustedIssuers = getConfig().getIssuer();
if (trustedIssuers != null) {
String[] issuers = trustedIssuers.split(",");
for (String trustedIssuer : issuers) {
if (iss != null && iss.equals(trustedIssuer.trim())) {
return token;
}
}
throw new IdentityBrokerException("Wrong issuer from token. Got: " + iss + " expected: " + getConfig().getIssuer());
}
return token;
} catch (IOException e) {
throw new IdentityBrokerException("Could not decode token.", e);
token = jws.readJsonContent(JsonWebToken.class);
} catch (JWSInputException e) {
throw new IdentityBrokerException("Invalid token", e);
}
String iss = token.getIssuer();
if (!token.hasAudience(getConfig().getClientId())) {
throw new IdentityBrokerException("Wrong audience from token.");
}
if (!token.isActive()) {
throw new IdentityBrokerException("Token is no longer valid");
}
String trustedIssuers = getConfig().getIssuer();
if (trustedIssuers != null) {
String[] issuers = trustedIssuers.split(",");
for (String trustedIssuer : issuers) {
if (iss != null && iss.equals(trustedIssuer.trim())) {
return token;
}
}
throw new IdentityBrokerException("Wrong issuer from token. Got: " + iss + " expected: " + getConfig().getIssuer());
}
return token;
}
@Override
@@ -89,7 +89,7 @@ public abstract class AbstractClaimMapper extends AbstractIdentityProviderMapper
} else if (value instanceof List) {
List list = (List)value;
for (Object val : list) {
return valueEquals(desiredValue, val);
if (valueEquals(desiredValue, val)) return true;
}
}
return false;
@@ -69,8 +69,8 @@ public abstract class AbstractJsonUserAttributeMapper extends AbstractIdentityPr
* @param user context to store profile data into
* @param profile to store into context
* @param provider identification of social provider to be used in log dump
*
* @see #importNewUser(KeycloakSession, RealmModel, UserModel, IdentityProviderMapperModel, BrokeredIdentityContext)
*
* @see #preprocessFederatedIdentity(KeycloakSession, RealmModel, IdentityProviderMapperModel, BrokeredIdentityContext)
* @see BrokeredIdentityContext#getContextData()
*/
public static void storeUserProfileForMapper(BrokeredIdentityContext user, JsonNode profile, String provider) {
@@ -100,17 +100,17 @@ public abstract class AbstractJsonUserAttributeMapper extends AbstractIdentityPr
}
@Override
public void importNewUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
public void preprocessFederatedIdentity(KeycloakSession session, RealmModel realm, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
String attribute = mapperModel.getConfig().get(CONF_USER_ATTRIBUTE);
if (attribute == null || attribute.trim().isEmpty()) {
logger.debug("Attribute is not configured");
logger.warnf("Attribute is not configured for mapper %s", mapperModel.getName());
return;
}
attribute = attribute.trim();
String value = getJsonValue(mapperModel, context);
if (value != null) {
user.setSingleAttribute(attribute, value);
context.setUserAttribute(attribute, value);
}
}
@@ -123,13 +123,13 @@ public abstract class AbstractJsonUserAttributeMapper extends AbstractIdentityPr
String jsonField = mapperModel.getConfig().get(CONF_JSON_FIELD);
if (jsonField == null || jsonField.trim().isEmpty()) {
logger.debug("JSON field path is not configured");
logger.warnf("JSON field path is not configured for mapper %s", mapperModel.getName());
return null;
}
jsonField = jsonField.trim();
if (jsonField.startsWith(JSON_PATH_DELIMITER) || jsonField.endsWith(JSON_PATH_DELIMITER) || jsonField.startsWith("[")) {
logger.debug("JSON field path is invalid " + jsonField);
logger.warnf("JSON field path is invalid %s", jsonField);
return null;
}
@@ -138,7 +138,7 @@ public abstract class AbstractJsonUserAttributeMapper extends AbstractIdentityPr
String value = getJsonValue(profileJsonNode, jsonField);
if (value == null) {
logger.debug("User profile JSON value '" + jsonField + "' is not available.");
logger.debugf("User profile JSON value '%s' is not available.", jsonField);
}
return value;
@@ -70,11 +70,11 @@ public class UserAttributeMapper extends AbstractClaimMapper {
}
@Override
public void importNewUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
public void preprocessFederatedIdentity(KeycloakSession session, RealmModel realm, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
String attribute = mapperModel.getConfig().get(USER_ATTRIBUTE);
Object value = getClaimValue(mapperModel, context);
if (value != null) {
user.setSingleAttribute(attribute, value.toString());
context.setUserAttribute(attribute, value.toString());
}
}
@@ -65,10 +65,6 @@ public class UsernameTemplateMapper extends AbstractClaimMapper {
return "Username Template Importer";
}
@Override
public void importNewUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
}
@Override
public void updateBrokeredUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
}
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.4.0.Final</version>
<version>1.7.0.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
+6 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.4.0.Final</version>
<version>1.7.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -45,6 +45,11 @@
<artifactId>jboss-logging</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,88 @@
package org.keycloak.broker.saml;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import javax.xml.stream.XMLEventReader;
import org.keycloak.broker.provider.DefaultDataMarshaller;
import org.keycloak.dom.saml.v2.assertion.AssertionType;
import org.keycloak.dom.saml.v2.assertion.AuthnStatementType;
import org.keycloak.dom.saml.v2.protocol.ResponseType;
import org.keycloak.saml.common.exceptions.ParsingException;
import org.keycloak.saml.common.exceptions.ProcessingException;
import org.keycloak.saml.common.util.StaxUtil;
import org.keycloak.saml.processing.core.parsers.saml.SAMLParser;
import org.keycloak.saml.processing.core.parsers.util.SAMLParserUtil;
import org.keycloak.saml.processing.core.saml.v2.writers.SAMLAssertionWriter;
import org.keycloak.saml.processing.core.saml.v2.writers.SAMLResponseWriter;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class SAMLDataMarshaller extends DefaultDataMarshaller {
@Override
public String serialize(Object obj) {
// Lame impl, but hopefully sufficient for now. See if something better is needed...
if (obj.getClass().getName().startsWith("org.keycloak.dom.saml")) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
if (obj instanceof ResponseType) {
ResponseType responseType = (ResponseType) obj;
SAMLResponseWriter samlWriter = new SAMLResponseWriter(StaxUtil.getXMLStreamWriter(bos));
samlWriter.write(responseType);
} else if (obj instanceof AssertionType) {
AssertionType assertion = (AssertionType) obj;
SAMLAssertionWriter samlWriter = new SAMLAssertionWriter(StaxUtil.getXMLStreamWriter(bos));
samlWriter.write(assertion);
} else if (obj instanceof AuthnStatementType) {
AuthnStatementType authnStatement = (AuthnStatementType) obj;
SAMLAssertionWriter samlWriter = new SAMLAssertionWriter(StaxUtil.getXMLStreamWriter(bos));
samlWriter.write(authnStatement, true);
} else {
throw new IllegalArgumentException("Don't know how to serialize object of type " + obj.getClass().getName());
}
} catch (ProcessingException pe) {
throw new RuntimeException(pe);
}
return new String(bos.toByteArray());
} else {
return super.serialize(obj);
}
}
@Override
public <T> T deserialize(String serialized, Class<T> clazz) {
if (clazz.getName().startsWith("org.keycloak.dom.saml")) {
String xmlString = serialized;
try {
if (clazz.equals(ResponseType.class) || clazz.equals(AssertionType.class)) {
byte[] bytes = xmlString.getBytes();
InputStream is = new ByteArrayInputStream(bytes);
Object respType = new SAMLParser().parse(is);
return clazz.cast(respType);
} else if (clazz.equals(AuthnStatementType.class)) {
byte[] bytes = xmlString.getBytes();
InputStream is = new ByteArrayInputStream(bytes);
XMLEventReader xmlEventReader = new SAMLParser().createEventReader(is);
AuthnStatementType authnStatement = SAMLParserUtil.parseAuthnStatement(xmlEventReader);
return clazz.cast(authnStatement);
} else {
throw new IllegalArgumentException("Don't know how to deserialize object of type " + clazz.getName());
}
} catch (ParsingException pe) {
throw new RuntimeException(pe);
}
} else {
return super.deserialize(serialized, clazz);
}
}
}
@@ -1,8 +1,8 @@
package org.keycloak.broker.saml;
import org.jboss.logging.Logger;
import org.keycloak.ClientConnection;
import org.keycloak.VerificationException;
import org.keycloak.common.ClientConnection;
import org.keycloak.common.VerificationException;
import org.keycloak.broker.provider.BrokeredIdentityContext;
import org.keycloak.broker.provider.IdentityBrokerException;
import org.keycloak.broker.provider.IdentityProvider;
@@ -10,7 +10,6 @@ import org.keycloak.dom.saml.v2.assertion.AssertionType;
import org.keycloak.dom.saml.v2.assertion.AttributeStatementType;
import org.keycloak.dom.saml.v2.assertion.AttributeType;
import org.keycloak.dom.saml.v2.assertion.AuthnStatementType;
import org.keycloak.dom.saml.v2.assertion.EncryptedAssertionType;
import org.keycloak.dom.saml.v2.assertion.NameIDType;
import org.keycloak.dom.saml.v2.assertion.SubjectType;
import org.keycloak.dom.saml.v2.protocol.LogoutRequestType;
@@ -24,31 +23,23 @@ import org.keycloak.events.EventType;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserSessionModel;
import org.keycloak.protocol.saml.SAML2LogoutResponseBuilder;
import org.keycloak.protocol.saml.SAMLRequestParser;
import org.keycloak.protocol.saml.JaxrsSAML2BindingBuilder;
import org.keycloak.saml.SAML2LogoutResponseBuilder;
import org.keycloak.saml.SAMLRequestParser;
import org.keycloak.protocol.saml.SamlProtocol;
import org.keycloak.protocol.saml.SamlProtocolUtils;
import org.keycloak.saml.common.constants.GeneralConstants;
import org.keycloak.saml.common.constants.JBossSAMLConstants;
import org.keycloak.saml.common.constants.JBossSAMLURIConstants;
import org.keycloak.saml.common.exceptions.ConfigurationException;
import org.keycloak.saml.common.exceptions.ProcessingException;
import org.keycloak.saml.common.util.DocumentUtil;
import org.keycloak.saml.common.util.StaxParserUtil;
import org.keycloak.saml.processing.api.saml.v2.response.SAML2Response;
import org.keycloak.saml.processing.core.parsers.saml.SAMLParser;
import org.keycloak.saml.processing.core.saml.v2.common.SAMLDocumentHolder;
import org.keycloak.saml.processing.core.saml.v2.constants.X500SAMLProfileConstants;
import org.keycloak.saml.processing.core.util.JAXPValidationUtil;
import org.keycloak.saml.processing.core.util.XMLEncryptionUtil;
import org.keycloak.saml.processing.core.saml.v2.util.AssertionUtil;
import org.keycloak.saml.processing.core.util.XMLSignatureUtil;
import org.keycloak.saml.processing.web.util.PostBindingUtil;
import org.keycloak.services.ErrorPage;
import org.keycloak.services.managers.AuthenticationManager;
import org.keycloak.services.messages.Messages;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
@@ -61,9 +52,7 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
import javax.xml.namespace.QName;
import java.io.IOException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.X509Certificate;
import java.util.List;
@@ -155,7 +144,7 @@ public class SAMLEndpoint {
}
protected abstract String getBindingType();
protected abstract void verifySignature(SAMLDocumentHolder documentHolder) throws VerificationException;
protected abstract void verifySignature(String key, SAMLDocumentHolder documentHolder) throws VerificationException;
protected abstract SAMLDocumentHolder extractRequestDocument(String samlRequest);
protected abstract SAMLDocumentHolder extractResponseDocument(String response);
protected PublicKey getIDPKey() {
@@ -188,7 +177,7 @@ public class SAMLEndpoint {
}
if (config.isValidateSignature()) {
try {
verifySignature(holder);
verifySignature(GeneralConstants.SAML_REQUEST_KEY, holder);
} catch (VerificationException e) {
logger.error("validation failed", e);
event.event(EventType.IDENTITY_PROVIDER_RESPONSE);
@@ -247,16 +236,18 @@ public class SAMLEndpoint {
builder.logoutRequestID(request.getID());
builder.destination(config.getSingleLogoutServiceUrl());
builder.issuer(issuerURL);
builder.relayState(relayState);
JaxrsSAML2BindingBuilder binding = new JaxrsSAML2BindingBuilder()
.relayState(relayState);
if (config.isWantAuthnRequestsSigned()) {
builder.signWith(realm.getPrivateKey(), realm.getPublicKey(), realm.getCertificate())
binding.signWith(realm.getPrivateKey(), realm.getPublicKey(), realm.getCertificate())
.signatureAlgorithm(provider.getSignatureAlgorithm())
.signDocument();
}
try {
if (config.isPostBindingResponse()) {
return builder.postBinding().response();
return binding.postBinding(builder.buildDocument()).response(config.getSingleLogoutServiceUrl());
} else {
return builder.redirectBinding().response();
return binding.redirectBinding(builder.buildDocument()).response(config.getSingleLogoutServiceUrl());
}
} catch (ConfigurationException e) {
throw new RuntimeException(e);
@@ -274,7 +265,7 @@ public class SAMLEndpoint {
protected Response handleLoginResponse(String samlResponse, SAMLDocumentHolder holder, ResponseType responseType, String relayState) {
try {
AssertionType assertion = getAssertion(responseType);
AssertionType assertion = AssertionUtil.getAssertion(responseType, realm.getPrivateKey());
SubjectType subject = assertion.getSubject();
SubjectType.STSubType subType = subject.getSubType();
NameIDType subjectNameID = (NameIDType) subType.getBaseID();
@@ -334,22 +325,6 @@ public class SAMLEndpoint {
private AssertionType getAssertion(ResponseType responseType) throws ProcessingException {
List<ResponseType.RTChoiceType> assertions = responseType.getAssertions();
if (assertions.isEmpty()) {
throw new IdentityBrokerException("No assertion from response.");
}
ResponseType.RTChoiceType rtChoiceType = assertions.get(0);
EncryptedAssertionType encryptedAssertion = rtChoiceType.getEncryptedAssertion();
if (encryptedAssertion != null) {
decryptAssertion(responseType, realm.getPrivateKey());
}
return responseType.getAssertions().get(0).getAssertion();
}
public Response handleSamlResponse(String samlResponse, String relayState) {
SAMLDocumentHolder holder = extractResponseDocument(samlResponse);
@@ -363,7 +338,7 @@ public class SAMLEndpoint {
}
if (config.isValidateSignature()) {
try {
verifySignature(holder);
verifySignature(GeneralConstants.SAML_RESPONSE_KEY, holder);
} catch (VerificationException e) {
logger.error("validation failed", e);
event.event(EventType.IDENTITY_PROVIDER_RESPONSE);
@@ -406,43 +381,14 @@ public class SAMLEndpoint {
}
protected ResponseType decryptAssertion(ResponseType responseType, PrivateKey privateKey) throws ProcessingException {
SAML2Response saml2Response = new SAML2Response();
try {
Document doc = saml2Response.convert(responseType);
Element enc = DocumentUtil.getElement(doc, new QName(JBossSAMLConstants.ENCRYPTED_ASSERTION.get()));
if (enc == null) {
throw new IdentityBrokerException("No encrypted assertion found.");
}
String oldID = enc.getAttribute(JBossSAMLConstants.ID.get());
Document newDoc = DocumentUtil.createDocument();
Node importedNode = newDoc.importNode(enc, true);
newDoc.appendChild(importedNode);
Element decryptedDocumentElement = XMLEncryptionUtil.decryptElementInDocument(newDoc, privateKey);
SAMLParser parser = new SAMLParser();
JAXPValidationUtil.checkSchemaValidation(decryptedDocumentElement);
AssertionType assertion = (AssertionType) parser.parse(StaxParserUtil.getXMLEventReader(DocumentUtil
.getNodeAsStream(decryptedDocumentElement)));
responseType.replaceAssertion(oldID, new ResponseType.RTChoiceType(assertion));
return responseType;
} catch (Exception e) {
throw new IdentityBrokerException("Could not decrypt assertion.", e);
}
}
}
protected class PostBinding extends Binding {
@Override
protected void verifySignature(SAMLDocumentHolder documentHolder) throws VerificationException {
protected void verifySignature(String key, SAMLDocumentHolder documentHolder) throws VerificationException {
SamlProtocolUtils.verifyDocumentSignature(documentHolder.getSamlDocument(), getIDPKey());
}
@@ -465,9 +411,9 @@ public class SAMLEndpoint {
protected class RedirectBinding extends Binding {
@Override
protected void verifySignature(SAMLDocumentHolder documentHolder) throws VerificationException {
protected void verifySignature(String key, SAMLDocumentHolder documentHolder) throws VerificationException {
PublicKey publicKey = getIDPKey();
SamlProtocolUtils.verifyRedirectSignature(publicKey, uriInfo);
SamlProtocolUtils.verifyRedirectSignature(publicKey, uriInfo, key);
}
@@ -22,6 +22,7 @@ import org.keycloak.broker.provider.AbstractIdentityProvider;
import org.keycloak.broker.provider.AuthenticationRequest;
import org.keycloak.broker.provider.BrokeredIdentityContext;
import org.keycloak.broker.provider.IdentityBrokerException;
import org.keycloak.broker.provider.IdentityProviderDataMarshaller;
import org.keycloak.broker.provider.util.SimpleHttp;
import org.keycloak.dom.saml.v2.assertion.AssertionType;
import org.keycloak.dom.saml.v2.assertion.AuthnStatementType;
@@ -33,20 +34,18 @@ import org.keycloak.models.ClientSessionModel;
import org.keycloak.models.FederatedIdentityModel;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserSessionModel;
import org.keycloak.protocol.saml.SAML2AuthnRequestBuilder;
import org.keycloak.protocol.saml.SAML2LogoutRequestBuilder;
import org.keycloak.protocol.saml.SAML2NameIDPolicyBuilder;
import org.keycloak.protocol.saml.JaxrsSAML2BindingBuilder;
import org.keycloak.saml.SAML2AuthnRequestBuilder;
import org.keycloak.saml.SAML2LogoutRequestBuilder;
import org.keycloak.saml.SAML2NameIDPolicyBuilder;
import org.keycloak.saml.SignatureAlgorithm;
import org.keycloak.saml.common.constants.GeneralConstants;
import org.keycloak.saml.common.constants.JBossSAMLURIConstants;
import org.keycloak.saml.common.exceptions.ConfigurationException;
import org.keycloak.saml.common.exceptions.ParsingException;
import org.keycloak.saml.common.exceptions.ProcessingException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
import java.io.IOException;
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
@@ -92,7 +91,8 @@ public class SAMLIdentityProvider extends AbstractIdentityProvider<SAMLIdentityP
.issuer(issuerURL)
.forceAuthn(getConfig().isForceAuthn())
.protocolBinding(protocolBinding)
.nameIdPolicy(SAML2NameIDPolicyBuilder.format(nameIDPolicyFormat))
.nameIdPolicy(SAML2NameIDPolicyBuilder.format(nameIDPolicyFormat));
JaxrsSAML2BindingBuilder binding = new JaxrsSAML2BindingBuilder()
.relayState(request.getState());
if (getConfig().isWantAuthnRequestsSigned()) {
@@ -109,14 +109,15 @@ public class SAMLIdentityProvider extends AbstractIdentityProvider<SAMLIdentityP
KeyPair keypair = new KeyPair(publicKey, privateKey);
authnRequestBuilder.signWith(keypair);
authnRequestBuilder.signDocument();
binding.signWith(keypair);
binding.signatureAlgorithm(getSignatureAlgorithm());
binding.signDocument();
}
if (getConfig().isPostBindingAuthnRequest()) {
return authnRequestBuilder.postBinding().request();
return binding.postBinding(authnRequestBuilder.toDocument()).request(destinationUrl);
} else {
return authnRequestBuilder.redirectBinding().request();
return binding.redirectBinding(authnRequestBuilder.toDocument()).request(destinationUrl);
}
} catch (Exception e) {
throw new IdentityBrokerException("Could not create authentication request.", e);
@@ -153,9 +154,10 @@ public class SAMLIdentityProvider extends AbstractIdentityProvider<SAMLIdentityP
String singleLogoutServiceUrl = getConfig().getSingleLogoutServiceUrl();
if (singleLogoutServiceUrl == null || singleLogoutServiceUrl.trim().equals("") || !getConfig().isBackchannelSupported()) return;
SAML2LogoutRequestBuilder logoutBuilder = buildLogoutRequest(userSession, uriInfo, realm, singleLogoutServiceUrl);
JaxrsSAML2BindingBuilder binding = buildLogoutBinding(userSession, realm);
try {
int status = SimpleHttp.doPost(singleLogoutServiceUrl)
.param(GeneralConstants.SAML_REQUEST_KEY, logoutBuilder.postBinding().encoded())
.param(GeneralConstants.SAML_REQUEST_KEY, binding.postBinding(logoutBuilder.buildDocument()).encoded())
.param(GeneralConstants.RELAY_STATE, userSession.getId()).asStatus();
boolean success = status >=200 && status < 400;
if (!success) {
@@ -178,7 +180,8 @@ public class SAMLIdentityProvider extends AbstractIdentityProvider<SAMLIdentityP
} else {
try {
SAML2LogoutRequestBuilder logoutBuilder = buildLogoutRequest(userSession, uriInfo, realm, singleLogoutServiceUrl);
return logoutBuilder.postBinding().request();
JaxrsSAML2BindingBuilder binding = buildLogoutBinding(userSession, realm);
return binding.postBinding(logoutBuilder.buildDocument()).request(singleLogoutServiceUrl);
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -192,13 +195,19 @@ public class SAMLIdentityProvider extends AbstractIdentityProvider<SAMLIdentityP
.issuer(getEntityId(uriInfo, realm))
.sessionIndex(userSession.getNote(SAMLEndpoint.SAML_FEDERATED_SESSION_INDEX))
.userPrincipal(userSession.getNote(SAMLEndpoint.SAML_FEDERATED_SUBJECT), userSession.getNote(SAMLEndpoint.SAML_FEDERATED_SUBJECT_NAMEFORMAT))
.destination(singleLogoutServiceUrl)
.destination(singleLogoutServiceUrl);
return logoutBuilder;
}
private JaxrsSAML2BindingBuilder buildLogoutBinding(UserSessionModel userSession, RealmModel realm) {
JaxrsSAML2BindingBuilder binding = new JaxrsSAML2BindingBuilder()
.relayState(userSession.getId());
if (getConfig().isWantAuthnRequestsSigned()) {
logoutBuilder.signWith(realm.getPrivateKey(), realm.getPublicKey(), realm.getCertificate())
binding.signWith(realm.getPrivateKey(), realm.getPublicKey(), realm.getCertificate())
.signatureAlgorithm(getSignatureAlgorithm())
.signDocument();
}
return logoutBuilder;
return binding;
}
@Override
@@ -220,7 +229,7 @@ public class SAMLIdentityProvider extends AbstractIdentityProvider<SAMLIdentityP
String descriptor =
"<EntityDescriptor entityID=\"" + getEntityId(uriInfo, realm) + "\">\n" +
"<EntityDescriptor xmlns=\"urn:oasis:names:tc:SAML:2.0:metadata\" entityID=\"" + getEntityId(uriInfo, realm) + "\">\n" +
" <SPSSODescriptor AuthnRequestsSigned=\"" + getConfig().isWantAuthnRequestsSigned() + "\"\n" +
" protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol urn:oasis:names:tc:SAML:1.1:protocol http://schemas.xmlsoap.org/ws/2003/07/secext\">\n" +
" <NameIDFormat>" + getConfig().getNameIDPolicyFormat() + "\n" +
@@ -245,4 +254,18 @@ public class SAMLIdentityProvider extends AbstractIdentityProvider<SAMLIdentityP
"</EntityDescriptor>\n";
return Response.ok(descriptor, MediaType.APPLICATION_XML_TYPE).build();
}
public SignatureAlgorithm getSignatureAlgorithm() {
String alg = getConfig().getSignatureAlgorithm();
if (alg != null) {
SignatureAlgorithm algorithm = SignatureAlgorithm.valueOf(alg);
if (algorithm != null) return algorithm;
}
return SignatureAlgorithm.RSA_SHA256;
}
@Override
public IdentityProviderDataMarshaller getMarshaller() {
return new SAMLDataMarshaller();
}
}
@@ -87,6 +87,14 @@ public class SAMLIdentityProviderConfig extends IdentityProviderModel {
getConfig().put("wantAuthnRequestsSigned", String.valueOf(wantAuthnRequestsSigned));
}
public String getSignatureAlgorithm() {
return getConfig().get("signatureAlgorithm");
}
public void setSignatureAlgorithm(String signatureAlgorithm) {
getConfig().put("signatureAlgorithm", signatureAlgorithm);
}
public String getEncryptionPublicKey() {
return getConfig().get("encryptionPublicKey");
}
@@ -73,75 +73,79 @@ public class SAMLIdentityProviderFactory extends AbstractIdentityProviderFactory
List<EntityDescriptorType.EDTChoiceType> choiceType = entityType.getChoiceType();
if (!choiceType.isEmpty()) {
EntityDescriptorType.EDTChoiceType edtChoiceType = choiceType.get(0);
List<EntityDescriptorType.EDTDescriptorChoiceType> descriptors = edtChoiceType.getDescriptors();
IDPSSODescriptorType idpDescriptor = null;
if (!descriptors.isEmpty()) {
EntityDescriptorType.EDTDescriptorChoiceType edtDescriptorChoiceType = descriptors.get(0);
IDPSSODescriptorType idpDescriptor = edtDescriptorChoiceType.getIdpDescriptor();
//Metadata documents can contain multiple Descriptors (See ADFS metadata documents) such as RoleDescriptor, SPSSODescriptor, IDPSSODescriptor.
//So we need to loop through to find the IDPSSODescriptor.
for(EntityDescriptorType.EDTChoiceType edtChoiceType : entityType.getChoiceType()) {
List<EntityDescriptorType.EDTDescriptorChoiceType> descriptors = edtChoiceType.getDescriptors();
if (idpDescriptor != null) {
SAMLIdentityProviderConfig samlIdentityProviderConfig = new SAMLIdentityProviderConfig();
String singleSignOnServiceUrl = null;
boolean postBinding = false;
for (EndpointType endpoint : idpDescriptor.getSingleSignOnService()) {
if (endpoint.getBinding().toString().equals(JBossSAMLURIConstants.SAML_HTTP_POST_BINDING.get())) {
singleSignOnServiceUrl = endpoint.getLocation().toString();
postBinding = true;
break;
} else if (endpoint.getBinding().toString().equals(JBossSAMLURIConstants.SAML_HTTP_REDIRECT_BINDING.get())){
singleSignOnServiceUrl = endpoint.getLocation().toString();
}
}
String singleLogoutServiceUrl = null;
for (EndpointType endpoint : idpDescriptor.getSingleLogoutService()) {
if (postBinding && endpoint.getBinding().toString().equals(JBossSAMLURIConstants.SAML_HTTP_POST_BINDING.get())) {
singleLogoutServiceUrl = endpoint.getLocation().toString();
break;
} else if (!postBinding && endpoint.getBinding().toString().equals(JBossSAMLURIConstants.SAML_HTTP_REDIRECT_BINDING.get())){
singleLogoutServiceUrl = endpoint.getLocation().toString();
break;
}
}
samlIdentityProviderConfig.setSingleLogoutServiceUrl(singleLogoutServiceUrl);
samlIdentityProviderConfig.setSingleSignOnServiceUrl(singleSignOnServiceUrl);
samlIdentityProviderConfig.setWantAuthnRequestsSigned(idpDescriptor.isWantAuthnRequestsSigned());
samlIdentityProviderConfig.setValidateSignature(idpDescriptor.isWantAuthnRequestsSigned());
samlIdentityProviderConfig.setPostBindingResponse(postBinding);
samlIdentityProviderConfig.setPostBindingAuthnRequest(postBinding);
List<KeyDescriptorType> keyDescriptor = idpDescriptor.getKeyDescriptor();
String defaultCertificate = null;
if (keyDescriptor != null) {
for (KeyDescriptorType keyDescriptorType : keyDescriptor) {
Element keyInfo = keyDescriptorType.getKeyInfo();
Element x509KeyInfo = DocumentUtil.getChildElement(keyInfo, new QName("dsig", "X509Certificate"));
if (KeyTypes.SIGNING.equals(keyDescriptorType.getUse())) {
samlIdentityProviderConfig.setSigningCertificate(x509KeyInfo.getTextContent());
} else if (KeyTypes.ENCRYPTION.equals(keyDescriptorType.getUse())) {
samlIdentityProviderConfig.setEncryptionPublicKey(x509KeyInfo.getTextContent());
} else if (keyDescriptorType.getUse() == null) {
defaultCertificate = x509KeyInfo.getTextContent();
}
}
}
if (defaultCertificate != null) {
if (samlIdentityProviderConfig.getSigningCertificate() == null) {
samlIdentityProviderConfig.setSigningCertificate(defaultCertificate);
}
if (samlIdentityProviderConfig.getEncryptionPublicKey() == null) {
samlIdentityProviderConfig.setEncryptionPublicKey(defaultCertificate);
}
}
return samlIdentityProviderConfig.getConfig();
if(!descriptors.isEmpty() && descriptors.get(0).getIdpDescriptor() != null) {
idpDescriptor = descriptors.get(0).getIdpDescriptor();
}
}
if (idpDescriptor != null) {
SAMLIdentityProviderConfig samlIdentityProviderConfig = new SAMLIdentityProviderConfig();
String singleSignOnServiceUrl = null;
boolean postBinding = false;
for (EndpointType endpoint : idpDescriptor.getSingleSignOnService()) {
if (endpoint.getBinding().toString().equals(JBossSAMLURIConstants.SAML_HTTP_POST_BINDING.get())) {
singleSignOnServiceUrl = endpoint.getLocation().toString();
postBinding = true;
break;
} else if (endpoint.getBinding().toString().equals(JBossSAMLURIConstants.SAML_HTTP_REDIRECT_BINDING.get())){
singleSignOnServiceUrl = endpoint.getLocation().toString();
}
}
String singleLogoutServiceUrl = null;
for (EndpointType endpoint : idpDescriptor.getSingleLogoutService()) {
if (postBinding && endpoint.getBinding().toString().equals(JBossSAMLURIConstants.SAML_HTTP_POST_BINDING.get())) {
singleLogoutServiceUrl = endpoint.getLocation().toString();
break;
} else if (!postBinding && endpoint.getBinding().toString().equals(JBossSAMLURIConstants.SAML_HTTP_REDIRECT_BINDING.get())){
singleLogoutServiceUrl = endpoint.getLocation().toString();
break;
}
}
samlIdentityProviderConfig.setSingleLogoutServiceUrl(singleLogoutServiceUrl);
samlIdentityProviderConfig.setSingleSignOnServiceUrl(singleSignOnServiceUrl);
samlIdentityProviderConfig.setWantAuthnRequestsSigned(idpDescriptor.isWantAuthnRequestsSigned());
samlIdentityProviderConfig.setValidateSignature(idpDescriptor.isWantAuthnRequestsSigned());
samlIdentityProviderConfig.setPostBindingResponse(postBinding);
samlIdentityProviderConfig.setPostBindingAuthnRequest(postBinding);
List<KeyDescriptorType> keyDescriptor = idpDescriptor.getKeyDescriptor();
String defaultCertificate = null;
if (keyDescriptor != null) {
for (KeyDescriptorType keyDescriptorType : keyDescriptor) {
Element keyInfo = keyDescriptorType.getKeyInfo();
Element x509KeyInfo = DocumentUtil.getChildElement(keyInfo, new QName("dsig", "X509Certificate"));
if (KeyTypes.SIGNING.equals(keyDescriptorType.getUse())) {
samlIdentityProviderConfig.setSigningCertificate(x509KeyInfo.getTextContent());
} else if (KeyTypes.ENCRYPTION.equals(keyDescriptorType.getUse())) {
samlIdentityProviderConfig.setEncryptionPublicKey(x509KeyInfo.getTextContent());
} else if (keyDescriptorType.getUse() == null) {
defaultCertificate = x509KeyInfo.getTextContent();
}
}
}
if (defaultCertificate != null) {
if (samlIdentityProviderConfig.getSigningCertificate() == null) {
samlIdentityProviderConfig.setSigningCertificate(defaultCertificate);
}
if (samlIdentityProviderConfig.getEncryptionPublicKey() == null) {
samlIdentityProviderConfig.setEncryptionPublicKey(defaultCertificate);
}
}
return samlIdentityProviderConfig.getConfig();
}
}
} catch (ParsingException pe) {
throw new RuntimeException("Could not parse IdP SAML Metadata", pe);
@@ -80,11 +80,11 @@ public class UserAttributeMapper extends AbstractIdentityProviderMapper {
}
@Override
public void importNewUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
public void preprocessFederatedIdentity(KeycloakSession session, RealmModel realm, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
String attribute = mapperModel.getConfig().get(USER_ATTRIBUTE);
Object value = getAttribute(mapperModel, context);
if (value != null) {
user.setSingleAttribute(attribute, value.toString());
context.setUserAttribute(attribute, value.toString());
}
}
@@ -98,7 +98,7 @@ public class UserAttributeMapper extends AbstractIdentityProviderMapper {
for (AttributeStatementType.ASTChoiceType choice : statement.getAttributes()) {
AttributeType attr = choice.getAttribute();
if (name != null && !name.equals(attr.getName())) continue;
if (friendly != null && !name.equals(attr.getFriendlyName())) continue;
if (friendly != null && !friendly.equals(attr.getFriendlyName())) continue;
List<Object> attributeValue = attr.getAttributeValue();
if (attributeValue == null || attributeValue.isEmpty()) return null;
@@ -71,11 +71,6 @@ public class UsernameTemplateMapper extends AbstractIdentityProviderMapper {
return "Username Template Importer";
}
@Override
public void importNewUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
}
@Override
public void updateBrokeredUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) {
@@ -0,0 +1,64 @@
package org.keycloak.broker.saml;
import org.junit.Assert;
import org.junit.Test;
import org.keycloak.dom.saml.v2.assertion.AssertionType;
import org.keycloak.dom.saml.v2.assertion.AuthnStatementType;
import org.keycloak.dom.saml.v2.assertion.NameIDType;
import org.keycloak.dom.saml.v2.protocol.ResponseType;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class SAMLDataMarshallerTest {
private static final String TEST_RESPONSE = "<samlp:Response xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" ID=\"ID_4804cf50-cd96-4b92-823e-89adaa0c78ba\" Version=\"2.0\" IssueInstant=\"2015-11-06T11:00:33.920Z\" Destination=\"http://localhost:8081/auth/realms/realm-with-broker/broker/kc-saml-idp-basic/endpoint\" InResponseTo=\"ID_c6b90123-f0bb-4c5c-bf9d-388d5bbe467a\"><saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">http://localhost:8082/auth/realms/realm-with-saml-idp-basic</saml:Issuer><samlp:Status><samlp:StatusCode Value=\"urn:oasis:names:tc:SAML:2.0:status:Success\"></samlp:StatusCode></samlp:Status><saml:Assertion xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" xmlns=\"urn:oasis:names:tc:SAML:2.0:assertion\" ID=\"ID_29b196c2-d641-45c8-a423-8ed8e54d4cf9\" Version=\"2.0\" IssueInstant=\"2015-11-06T11:00:33.911Z\"><saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">http://localhost:8082/auth/realms/realm-with-saml-idp-basic</saml:Issuer><saml:Subject><saml:NameID xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" Format=\"urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified\">test-user</saml:NameID><saml:SubjectConfirmation Method=\"urn:oasis:names:tc:SAML:2.0:cm:bearer\"><saml:SubjectConfirmationData InResponseTo=\"ID_c6b90123-f0bb-4c5c-bf9d-388d5bbe467a\" NotOnOrAfter=\"2015-11-06T11:05:31.911Z\" Recipient=\"http://localhost:8081/auth/realms/realm-with-broker/broker/kc-saml-idp-basic/endpoint\"></saml:SubjectConfirmationData></saml:SubjectConfirmation></saml:Subject><saml:Conditions NotBefore=\"2015-11-06T11:00:31.911Z\" NotOnOrAfter=\"2015-11-06T11:01:31.911Z\"><saml:AudienceRestriction><saml:Audience>http://localhost:8081/auth/realms/realm-with-broker</saml:Audience></saml:AudienceRestriction></saml:Conditions><saml:AuthnStatement AuthnInstant=\"2015-11-06T11:00:33.923Z\" SessionIndex=\"fa0f4fd3-8a11-44f4-9acb-ee30c5bb8fe5\"><saml:AuthnContext><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</saml:AuthnContextClassRef></saml:AuthnContext></saml:AuthnStatement><saml:AttributeStatement><saml:Attribute Name=\"mobile\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:basic\"><saml:AttributeValue xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xsi:type=\"xs:string\">617-666-7777</saml:AttributeValue></saml:Attribute><saml:Attribute Name=\"urn:oid:1.2.840.113549.1.9.1\" FriendlyName=\"email\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:basic\"><saml:AttributeValue xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xsi:type=\"xs:string\">test-user@localhost</saml:AttributeValue></saml:Attribute></saml:AttributeStatement><saml:AttributeStatement><saml:Attribute Name=\"Role\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:basic\"><saml:AttributeValue xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xsi:type=\"xs:string\">manager</saml:AttributeValue></saml:Attribute></saml:AttributeStatement></saml:Assertion></samlp:Response>";
private static final String TEST_ASSERTION = "<saml:Assertion xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" xmlns=\"urn:oasis:names:tc:SAML:2.0:assertion\" ID=\"ID_29b196c2-d641-45c8-a423-8ed8e54d4cf9\" Version=\"2.0\" IssueInstant=\"2015-11-06T11:00:33.911Z\"><saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">http://localhost:8082/auth/realms/realm-with-saml-idp-basic</saml:Issuer><saml:Subject><saml:NameID xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" Format=\"urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified\">test-user</saml:NameID><saml:SubjectConfirmation Method=\"urn:oasis:names:tc:SAML:2.0:cm:bearer\"><saml:SubjectConfirmationData InResponseTo=\"ID_c6b90123-f0bb-4c5c-bf9d-388d5bbe467a\" NotOnOrAfter=\"2015-11-06T11:05:31.911Z\" Recipient=\"http://localhost:8081/auth/realms/realm-with-broker/broker/kc-saml-idp-basic/endpoint\"></saml:SubjectConfirmationData></saml:SubjectConfirmation></saml:Subject><saml:Conditions NotBefore=\"2015-11-06T11:00:31.911Z\" NotOnOrAfter=\"2015-11-06T11:01:31.911Z\"><saml:AudienceRestriction><saml:Audience>http://localhost:8081/auth/realms/realm-with-broker</saml:Audience></saml:AudienceRestriction></saml:Conditions><saml:AuthnStatement AuthnInstant=\"2015-11-06T11:00:33.923Z\" SessionIndex=\"fa0f4fd3-8a11-44f4-9acb-ee30c5bb8fe5\"><saml:AuthnContext><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</saml:AuthnContextClassRef></saml:AuthnContext></saml:AuthnStatement><saml:AttributeStatement><saml:Attribute Name=\"mobile\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:basic\"><saml:AttributeValue xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xsi:type=\"xs:string\">617-666-7777</saml:AttributeValue></saml:Attribute><saml:Attribute Name=\"urn:oid:1.2.840.113549.1.9.1\" FriendlyName=\"email\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:basic\"><saml:AttributeValue xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xsi:type=\"xs:string\">test-user@localhost</saml:AttributeValue></saml:Attribute></saml:AttributeStatement><saml:AttributeStatement><saml:Attribute Name=\"Role\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:basic\"><saml:AttributeValue xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xsi:type=\"xs:string\">manager</saml:AttributeValue></saml:Attribute></saml:AttributeStatement></saml:Assertion>";
private static final String TEST_AUTHN_TYPE = "<saml:AuthnStatement xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" xmlns=\"urn:oasis:names:tc:SAML:2.0:assertion\" AuthnInstant=\"2015-11-06T11:00:33.923Z\" SessionIndex=\"fa0f4fd3-8a11-44f4-9acb-ee30c5bb8fe5\"><saml:AuthnContext><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</saml:AuthnContextClassRef></saml:AuthnContext></saml:AuthnStatement>";
@Test
public void testParseResponse() throws Exception {
SAMLDataMarshaller serializer = new SAMLDataMarshaller();
ResponseType responseType = serializer.deserialize(TEST_RESPONSE, ResponseType.class);
// test ResponseType
Assert.assertEquals(responseType.getID(), "ID_4804cf50-cd96-4b92-823e-89adaa0c78ba");
Assert.assertEquals(responseType.getDestination(), "http://localhost:8081/auth/realms/realm-with-broker/broker/kc-saml-idp-basic/endpoint");
Assert.assertEquals(responseType.getIssuer().getValue(), "http://localhost:8082/auth/realms/realm-with-saml-idp-basic");
Assert.assertEquals(responseType.getAssertions().get(0).getID(), "ID_29b196c2-d641-45c8-a423-8ed8e54d4cf9");
// back to String
String serialized = serializer.serialize(responseType);
Assert.assertEquals(TEST_RESPONSE, serialized);
}
@Test
public void testParseAssertion() throws Exception {
SAMLDataMarshaller serializer = new SAMLDataMarshaller();
AssertionType assertion = serializer.deserialize(TEST_ASSERTION, AssertionType.class);
// test assertion
Assert.assertEquals(assertion.getID(), "ID_29b196c2-d641-45c8-a423-8ed8e54d4cf9");
Assert.assertEquals(((NameIDType) assertion.getSubject().getSubType().getBaseID()).getValue(), "test-user");
// back to String
String serialized = serializer.serialize(assertion);
Assert.assertEquals(TEST_ASSERTION, serialized);
}
@Test
public void testParseAuthnType() throws Exception {
SAMLDataMarshaller serializer = new SAMLDataMarshaller();
AuthnStatementType authnStatement = serializer.deserialize(TEST_AUTHN_TYPE, AuthnStatementType.class);
// test authnStatement
Assert.assertEquals(authnStatement.getSessionIndex(), "fa0f4fd3-8a11-44f4-9acb-ee30c5bb8fe5");
// back to String
String serialized = serializer.serialize(authnStatement);
Assert.assertEquals(TEST_AUTHN_TYPE, serialized);
}
}
@@ -2,27 +2,24 @@
<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>
<artifactId>keycloak-client-registration-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.4.0.Final</version>
<relativePath>../../pom.xml</relativePath>
<version>1.7.0.Final</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-model-sessions-mem</artifactId>
<name>Keycloak Model Sessions Mem</name>
<artifactId>keycloak-client-registration-api</artifactId>
<name>Keycloak Client Registration API</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-model-api</artifactId>
<scope>provided</scope>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
</dependencies>
@@ -0,0 +1,68 @@
package org.keycloak.client.registration;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpRequest;
import org.keycloak.common.util.Base64;
import org.keycloak.representations.idm.ClientInitialAccessPresentation;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.representations.oidc.OIDCClientRepresentation;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public abstract class Auth {
public abstract void addAuth(HttpRequest request);
public static Auth token(String token) {
return new BearerTokenAuth(token);
}
public static Auth token(ClientInitialAccessPresentation initialAccess) {
return new BearerTokenAuth(initialAccess.getToken());
}
public static Auth token(ClientRepresentation client) {
return new BearerTokenAuth(client.getRegistrationAccessToken());
}
public static Auth token(OIDCClientRepresentation client) {
return new BearerTokenAuth(client.getRegistrationAccessToken());
}
public static Auth client(String clientId, String clientSecret) {
return new BasicAuth(clientId, clientSecret);
}
private static class BearerTokenAuth extends Auth {
private String token;
public BearerTokenAuth(String token) {
this.token = token;
}
@Override
public void addAuth(HttpRequest request) {
request.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + token);
}
}
private static class BasicAuth extends Auth {
private String username;
private String password;
public BasicAuth(String username, String password) {
this.username = username;
this.password = password;
}
@Override
public void addAuth(HttpRequest request) {
String val = Base64.encodeBytes((username + ":" + password).getBytes());
request.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + val);
}
}
}
@@ -0,0 +1,186 @@
package org.keycloak.client.registration;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClients;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.keycloak.representations.adapters.config.AdapterConfig;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.representations.oidc.OIDCClientRepresentation;
import org.keycloak.util.JsonSerialization;
import java.io.IOException;
import java.io.InputStream;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class ClientRegistration {
public static final ObjectMapper outputMapper = new ObjectMapper();
static {
outputMapper.getSerializationConfig().addMixInAnnotations(ClientRepresentation.class, ClientRepresentationMixIn.class);
outputMapper.getSerializationConfig().addMixInAnnotations(OIDCClientRepresentation.class, OIDCClientRepresentationMixIn.class);
outputMapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
}
private final String JSON = "application/json";
private final String XML = "application/xml";
private final String DEFAULT = "default";
private final String INSTALLATION = "install";
private final String OIDC = "openid-connect";
private final String SAML = "saml2-entity-descriptor";
private HttpUtil httpUtil;
public static ClientRegistrationBuilder create() {
return new ClientRegistrationBuilder();
}
ClientRegistration(HttpUtil httpUtil) {
this.httpUtil = httpUtil;
}
public void close() throws ClientRegistrationException {
if (httpUtil != null) {
httpUtil.close();
}
httpUtil = null;
}
public ClientRegistration auth(Auth auth) {
httpUtil.setAuth(auth);
return this;
}
public ClientRepresentation create(ClientRepresentation client) throws ClientRegistrationException {
String content = serialize(client);
InputStream resultStream = httpUtil.doPost(content, JSON, JSON, DEFAULT);
return deserialize(resultStream, ClientRepresentation.class);
}
public ClientRepresentation get(String clientId) throws ClientRegistrationException {
InputStream resultStream = httpUtil.doGet(JSON, DEFAULT, clientId);
return resultStream != null ? deserialize(resultStream, ClientRepresentation.class) : null;
}
public AdapterConfig getAdapterConfig(String clientId) throws ClientRegistrationException {
InputStream resultStream = httpUtil.doGet(JSON, INSTALLATION, clientId);
return resultStream != null ? deserialize(resultStream, AdapterConfig.class) : null;
}
public ClientRepresentation update(ClientRepresentation client) throws ClientRegistrationException {
String content = serialize(client);
InputStream resultStream = httpUtil.doPut(content, JSON, JSON, DEFAULT, client.getClientId());
return resultStream != null ? deserialize(resultStream, ClientRepresentation.class) : null;
}
public void delete(ClientRepresentation client) throws ClientRegistrationException {
delete(client.getClientId());
}
public void delete(String clientId) throws ClientRegistrationException {
httpUtil.doDelete(DEFAULT, clientId);
}
public OIDCClientRegistration oidc() {
return new OIDCClientRegistration();
}
public SAMLClientRegistration saml() {
return new SAMLClientRegistration();
}
public static String serialize(Object obj) throws ClientRegistrationException {
try {
return outputMapper.writeValueAsString(obj);
} catch (IOException e) {
throw new ClientRegistrationException("Failed to write json object", e);
}
}
private static <T> T deserialize(InputStream inputStream, Class<T> clazz) throws ClientRegistrationException {
try {
return JsonSerialization.readValue(inputStream, clazz);
} catch (IOException e) {
throw new ClientRegistrationException("Failed to read json object", e);
}
}
public class OIDCClientRegistration {
public OIDCClientRepresentation create(OIDCClientRepresentation client) throws ClientRegistrationException {
String content = serialize(client);
InputStream resultStream = httpUtil.doPost(content, JSON, JSON, OIDC);
return deserialize(resultStream, OIDCClientRepresentation.class);
}
public OIDCClientRepresentation get(String clientId) throws ClientRegistrationException {
InputStream resultStream = httpUtil.doGet(JSON, OIDC, clientId);
return resultStream != null ? deserialize(resultStream, OIDCClientRepresentation.class) : null;
}
public OIDCClientRepresentation update(OIDCClientRepresentation client) throws ClientRegistrationException {
String content = serialize(client);
InputStream resultStream = httpUtil.doPut(content, JSON, JSON, OIDC, client.getClientId());
return resultStream != null ? deserialize(resultStream, OIDCClientRepresentation.class) : null;
}
public void delete(OIDCClientRepresentation client) throws ClientRegistrationException {
delete(client.getClientId());
}
public void delete(String clientId) throws ClientRegistrationException {
httpUtil.doDelete(OIDC, clientId);
}
}
public class SAMLClientRegistration {
public ClientRepresentation create(String entityDescriptor) throws ClientRegistrationException {
InputStream resultStream = httpUtil.doPost(entityDescriptor, XML, JSON, SAML);
return deserialize(resultStream, ClientRepresentation.class);
}
}
public static class ClientRegistrationBuilder {
private String url;
private HttpClient httpClient;
ClientRegistrationBuilder() {
}
public ClientRegistrationBuilder url(String realmUrl) {
url = realmUrl;
return this;
}
public ClientRegistrationBuilder url(String authUrl, String realm) {
url = HttpUtil.getUrl(authUrl, "realms", realm, "clients");
return this;
}
public ClientRegistrationBuilder httpClient(HttpClient httpClient) {
this.httpClient = httpClient;
return this;
}
public ClientRegistration build() {
if (url == null) {
throw new IllegalStateException("url not configured");
}
if (httpClient == null) {
httpClient = HttpClients.createDefault();
}
return new ClientRegistration(new HttpUtil(httpClient, url));
}
}
}
@@ -0,0 +1,16 @@
package org.keycloak.client.registration;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class ClientRegistrationException extends Exception {
public ClientRegistrationException(String s, Throwable throwable) {
super(s, throwable);
}
public ClientRegistrationException(String s) {
super(s);
}
}
@@ -0,0 +1,13 @@
package org.keycloak.client.registration;
import org.codehaus.jackson.annotate.JsonIgnore;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
abstract class ClientRepresentationMixIn {
@JsonIgnore
String registrationAccessToken;
}
@@ -0,0 +1,22 @@
package org.keycloak.client.registration;
import org.apache.http.StatusLine;
import java.io.IOException;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class HttpErrorException extends IOException {
private StatusLine statusLine;
public HttpErrorException(StatusLine statusLine) {
this.statusLine = statusLine;
}
public StatusLine getStatusLine() {
return statusLine;
}
}
@@ -0,0 +1,171 @@
package org.keycloak.client.registration;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.*;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.keycloak.client.registration.Auth;
import org.keycloak.client.registration.ClientRegistrationException;
import org.keycloak.client.registration.HttpErrorException;
import java.io.IOException;
import java.io.InputStream;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
class HttpUtil {
private HttpClient httpClient;
private String baseUri;
private Auth auth;
HttpUtil(HttpClient httpClient, String baseUri) {
this.httpClient = httpClient;
this.baseUri = baseUri;
}
void setAuth(Auth auth) {
this.auth = auth;
}
InputStream doPost(String content, String contentType, String acceptType, String... path) throws ClientRegistrationException {
try {
HttpPost request = new HttpPost(getUrl(baseUri, path));
request.setHeader(HttpHeaders.CONTENT_TYPE, contentType);
request.setHeader(HttpHeaders.ACCEPT, acceptType);
request.setEntity(new StringEntity(content));
addAuth(request);
HttpResponse response = httpClient.execute(request);
InputStream responseStream = null;
if (response.getEntity() != null) {
responseStream = response.getEntity().getContent();
}
if (response.getStatusLine().getStatusCode() == 201) {
return responseStream;
} else {
responseStream.close();
throw new HttpErrorException(response.getStatusLine());
}
} catch (IOException e) {
throw new ClientRegistrationException("Failed to send request", e);
}
}
InputStream doGet(String acceptType, String... path) throws ClientRegistrationException {
try {
HttpGet request = new HttpGet(getUrl(baseUri, path));
request.setHeader(HttpHeaders.ACCEPT, acceptType);
addAuth(request);
HttpResponse response = httpClient.execute(request);
InputStream responseStream = null;
if (response.getEntity() != null) {
responseStream = response.getEntity().getContent();
}
if (response.getStatusLine().getStatusCode() == 200) {
return responseStream;
} else if (response.getStatusLine().getStatusCode() == 404) {
responseStream.close();
return null;
} else {
if (responseStream != null) {
responseStream.close();
}
throw new HttpErrorException(response.getStatusLine());
}
} catch (IOException e) {
throw new ClientRegistrationException("Failed to send request", e);
}
}
InputStream doPut(String content, String contentType, String acceptType, String... path) throws ClientRegistrationException {
try {
HttpPut request = new HttpPut(getUrl(baseUri, path));
request.setHeader(HttpHeaders.CONTENT_TYPE, contentType);
request.setHeader(HttpHeaders.ACCEPT, acceptType);
request.setEntity(new StringEntity(content));
addAuth(request);
HttpResponse response = httpClient.execute(request);
if (response.getEntity() != null) {
response.getEntity().getContent();
}
InputStream responseStream = null;
if (response.getEntity() != null) {
responseStream = response.getEntity().getContent();
}
if (response.getStatusLine().getStatusCode() == 200) {
return responseStream;
} else {
if (responseStream != null) {
responseStream.close();
}
throw new HttpErrorException(response.getStatusLine());
}
} catch (IOException e) {
throw new ClientRegistrationException("Failed to send request", e);
}
}
void doDelete(String... path) throws ClientRegistrationException {
try {
HttpDelete request = new HttpDelete(getUrl(baseUri, path));
addAuth(request);
HttpResponse response = httpClient.execute(request);
if (response.getEntity() != null) {
response.getEntity().getContent().close();
}
if (response.getStatusLine().getStatusCode() != 204) {
throw new HttpErrorException(response.getStatusLine());
}
} catch (IOException e) {
throw new ClientRegistrationException("Failed to send request", e);
}
}
void close() throws ClientRegistrationException {
if (httpClient instanceof CloseableHttpClient) {
try {
((CloseableHttpClient) httpClient).close();
} catch (IOException e) {
throw new ClientRegistrationException("Failed to close http client", e);
}
}
}
static String getUrl(String baseUri, String... path) {
StringBuilder s = new StringBuilder();
s.append(baseUri);
for (String p : path) {
s.append('/');
s.append(p);
}
return s.toString();
}
private void addAuth(HttpRequestBase request) {
if (auth != null) {
auth.addAuth(request);
}
}
}
@@ -0,0 +1,22 @@
package org.keycloak.client.registration;
import org.codehaus.jackson.annotate.JsonIgnore;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
abstract class OIDCClientRepresentationMixIn {
@JsonIgnore
private Integer client_id_issued_at;
@JsonIgnore
private Integer client_secret_expires_at;
@JsonIgnore
private String registration_client_uri;
@JsonIgnore
private String registration_access_token;
}
+34
View File
@@ -0,0 +1,34 @@
<?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-client-registration-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.7.0.Final-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-client-registration-cli</artifactId>
<name>Keycloak Client Registration CLI</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-client-registration-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.aesh</groupId>
<artifactId>aesh</artifactId>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,72 @@
package org.keycloak.client.registration.cli;
import org.jboss.aesh.cl.parser.CommandLineParserException;
import org.jboss.aesh.console.AeshConsole;
import org.jboss.aesh.console.AeshConsoleBuilder;
import org.jboss.aesh.console.Prompt;
import org.jboss.aesh.console.command.Command;
import org.jboss.aesh.console.command.CommandNotFoundException;
import org.jboss.aesh.console.command.registry.AeshCommandRegistryBuilder;
import org.jboss.aesh.console.settings.Settings;
import org.jboss.aesh.console.settings.SettingsBuilder;
import org.jboss.aesh.terminal.Color;
import org.jboss.aesh.terminal.TerminalColor;
import org.jboss.aesh.terminal.TerminalString;
import org.keycloak.client.registration.Auth;
import org.keycloak.client.registration.ClientRegistration;
import org.keycloak.client.registration.cli.commands.CreateCommand;
import org.keycloak.client.registration.cli.commands.ExitCommand;
import org.keycloak.client.registration.cli.commands.SetupCommand;
import java.util.LinkedList;
import java.util.List;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class ClientRegistrationCLI {
private static ClientRegistration reg;
public static void main(String[] args) throws CommandLineParserException, CommandNotFoundException {
reg = ClientRegistration.create().url("http://localhost:8080/auth/realms/master").build();
reg.auth(Auth.token("..."));
Context context = new Context();
List<Command> commands = new LinkedList<>();
commands.add(new SetupCommand(context));
commands.add(new CreateCommand(context));
commands.add(new ExitCommand(context));
SettingsBuilder builder = new SettingsBuilder().logging(true);
builder.enableMan(true).readInputrc(false);
Settings settings = builder.create();
AeshCommandRegistryBuilder commandRegistryBuilder = new AeshCommandRegistryBuilder();
for (Command c : commands) {
commandRegistryBuilder.command(c);
}
AeshConsole aeshConsole = new AeshConsoleBuilder()
.commandRegistry(commandRegistryBuilder.create())
.settings(settings)
.prompt(new Prompt(new TerminalString("[clientreg]$ ",
new TerminalColor(Color.GREEN, Color.DEFAULT, Color.Intensity.BRIGHT))))
.create();
aeshConsole.start();
/*
if (args.length > 0) {
CommandContainer command = registry.getCommand(args[0], null);
ParserGenerator.parseAndPopulate(command, args[0], Arrays.copyOfRange(args, 1, args.length));
}*/
//commandInvocation.getCommandRegistry().getAllCommandNames()
}
}
@@ -0,0 +1,37 @@
package org.keycloak.client.registration.cli;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.keycloak.client.registration.ClientRegistration;
import org.keycloak.util.SystemPropertiesJsonParserFactory;
import java.io.IOException;
import java.io.InputStream;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class Context {
private static final ObjectMapper mapper = new ObjectMapper(new SystemPropertiesJsonParserFactory());
static {
mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
mapper.enable(SerializationConfig.Feature.INDENT_OUTPUT);
}
private ClientRegistration reg;
public ClientRegistration getReg() {
return reg;
}
public void setReg(ClientRegistration reg) {
this.reg = reg;
}
public static <T> T readJson(InputStream bytes, Class<T> type) throws IOException {
return mapper.readValue(bytes, type);
}
}
@@ -0,0 +1,64 @@
package org.keycloak.client.registration.cli.commands;
import org.jboss.aesh.cl.Arguments;
import org.jboss.aesh.cl.CommandDefinition;
import org.jboss.aesh.cl.Option;
import org.jboss.aesh.console.command.Command;
import org.jboss.aesh.console.command.CommandResult;
import org.jboss.aesh.console.command.invocation.CommandInvocation;
import org.jboss.aesh.io.Resource;
import org.keycloak.client.registration.ClientRegistrationException;
import org.keycloak.client.registration.cli.Context;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.util.JsonSerialization;
import java.io.IOException;
import java.util.List;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
@CommandDefinition(name="create", description = "[OPTIONS] FILE")
public class CreateCommand implements Command {
@Option(shortName = 'h', hasValue = false, description = "display this help and exit")
private boolean help;
@Arguments(description = "files or directories thats listed")
private List<Resource> arguments;
private Context context;
public CreateCommand(Context context) {
this.context = context;
}
@Override
public CommandResult execute(CommandInvocation commandInvocation) throws IOException, InterruptedException {
System.out.println(help);
if(help) {
commandInvocation.getShell().out().println(commandInvocation.getHelpInfo("create"));
}
else {
if(arguments != null) {
for(Resource f : arguments) {
System.out.println(f.getAbsolutePath());
ClientRepresentation rep = JsonSerialization.readValue(f.read(), ClientRepresentation.class);
try {
context.getReg().create(rep);
} catch (ClientRegistrationException e) {
e.printStackTrace();
}
}
}
}
// reg.create();
return CommandResult.SUCCESS;
}
}
@@ -0,0 +1,29 @@
package org.keycloak.client.registration.cli.commands;
import org.jboss.aesh.cl.CommandDefinition;
import org.jboss.aesh.console.command.Command;
import org.jboss.aesh.console.command.CommandResult;
import org.jboss.aesh.console.command.invocation.CommandInvocation;
import org.keycloak.client.registration.cli.Context;
import java.io.IOException;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
@CommandDefinition(name="exit", description = "Exit the program")
public class ExitCommand implements Command {
private Context context;
public ExitCommand(Context context) {
this.context = context;
}
@Override
public CommandResult execute(CommandInvocation commandInvocation) throws IOException, InterruptedException {
commandInvocation.stop();
return CommandResult.SUCCESS;
}
}
@@ -0,0 +1,48 @@
package org.keycloak.client.registration.cli.commands;
import org.jboss.aesh.cl.CommandDefinition;
import org.jboss.aesh.cl.Option;
import org.jboss.aesh.console.command.Command;
import org.jboss.aesh.console.command.CommandResult;
import org.jboss.aesh.console.command.invocation.CommandInvocation;
import org.jboss.aesh.io.Resource;
import org.keycloak.client.registration.ClientRegistrationException;
import org.keycloak.client.registration.cli.Context;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.util.JsonSerialization;
import java.io.IOException;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
@CommandDefinition(name="setup", description = "")
public class SetupCommand implements Command {
@Option(shortName = 'h', hasValue = false, description = "display this help and exit")
private boolean help;
private Context context;
public SetupCommand(Context context) {
this.context = context;
}
@Override
public CommandResult execute(CommandInvocation commandInvocation) throws IOException, InterruptedException {
System.out.println(help);
if(help) {
commandInvocation.getShell().out().println(commandInvocation.getHelpInfo("create"));
}
return CommandResult.SUCCESS;
}
private String promptForUsername(CommandInvocation invocation) throws InterruptedException {
invocation.print("username: ");
return invocation.getInputLine();
}
}
+19
View File
@@ -0,0 +1,19 @@
<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.7.0.Final</version>
</parent>
<name>Keycloak Client Registration Parent</name>
<description/>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-client-registration-parent</artifactId>
<packaging>pom</packaging>
<modules>
<module>api</module>
<!--<module>cli</module>-->
</modules>
</project>
Executable
+94
View File
@@ -0,0 +1,94 @@
<?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.7.0.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-common</artifactId>
<name>Keycloak Common</name>
<packaging>jar</packaging>
<description>Common library and dependencies shared with server and all adapters</description>
<properties>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
<keycloak.osgi.export>
org.keycloak.common.*
</keycloak.osgi.export>
<keycloak.osgi.import>
*;resolution:=optional
</keycloak.osgi.import>
</properties>
<dependencies>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<instructions>
<Bundle-ClassPath>.</Bundle-ClassPath>
<Bundle-Name>${project.name}</Bundle-Name>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Import-Package>${keycloak.osgi.import}</Import-Package>
<Export-Package>${keycloak.osgi.export}</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -1,4 +1,4 @@
package org.keycloak;
package org.keycloak.common;
/**
* Information about the client connection
@@ -1,4 +1,4 @@
package org.keycloak;
package org.keycloak.common;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
+37
View File
@@ -0,0 +1,37 @@
package org.keycloak.common;
import org.keycloak.common.util.Time;
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 final String UNKNOWN = "UNKNOWN";
public static String VERSION;
public static String RESOURCES_VERSION;
public static String BUILD_TIME;
static {
Properties props = new Properties();
InputStream is = Version.class.getResourceAsStream("/keycloak-version.properties");
try {
props.load(is);
Version.VERSION = props.getProperty("version");
Version.BUILD_TIME = props.getProperty("build-time");
Version.RESOURCES_VERSION = Version.VERSION.toLowerCase();
if (Version.RESOURCES_VERSION.endsWith("-snapshot")) {
Version.RESOURCES_VERSION = Version.RESOURCES_VERSION.replace("-snapshot", "-" + Time.currentTime());
}
} catch (IOException e) {
Version.VERSION= Version.UNKNOWN;
Version.BUILD_TIME= Version.UNKNOWN;
}
}
}
@@ -1,4 +1,4 @@
package org.keycloak.constants;
package org.keycloak.common.constants;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
@@ -1,4 +1,4 @@
package org.keycloak.constants;
package org.keycloak.common.constants;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
@@ -1,4 +1,4 @@
package org.keycloak.constants;
package org.keycloak.common.constants;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
@@ -1,4 +1,4 @@
package org.keycloak.enums;
package org.keycloak.common.enums;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
@@ -1,6 +1,6 @@
package org.keycloak.enums;
package org.keycloak.common.enums;
import org.keycloak.ClientConnection;
import org.keycloak.common.ClientConnection;
import java.net.InetAddress;
import java.net.UnknownHostException;
File diff suppressed because it is too large. Load diff
@@ -1,8 +1,6 @@
package org.keycloak.util;
package org.keycloak.common.util;
import net.iharder.Base64;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
@@ -1,10 +1,9 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.SecureRandom;
import java.security.Security;
import java.security.cert.X509Certificate;
import java.util.Calendar;
import java.util.Date;
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.util.Collection;
import java.util.Iterator;
@@ -23,4 +23,19 @@ public class CollectionUtil {
}
return sb.toString();
}
// Return true if all items from col1 are in col2 and viceversa. Order is not taken into account
public static <T> boolean collectionEquals(Collection<T> col1, Collection<T> col2) {
if (col1.size() != col2.size()) {
return false;
}
for (T item : col1) {
if (!col2.contains(item)) {
return false;
}
}
return true;
}
}
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.io.DataInputStream;
import java.io.InputStream;
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -1,6 +1,6 @@
package org.keycloak.util;
package org.keycloak.common.util;
import org.keycloak.constants.GenericConstants;
import org.keycloak.common.constants.GenericConstants;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.util;
package org.keycloak.common.util;
/**
* @author pedroigor
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -12,13 +12,12 @@ import java.lang.reflect.Method;
import javax.security.auth.kerberos.KerberosTicket;
import net.iharder.Base64;
import org.ietf.jgss.GSSCredential;
import org.ietf.jgss.GSSException;
import org.ietf.jgss.GSSManager;
import org.ietf.jgss.Oid;
import org.keycloak.constants.KerberosConstants;
import org.keycloak.util.reflections.Reflections;
import org.keycloak.common.constants.KerberosConstants;
import org.keycloak.common.util.reflections.Reflections;
import sun.security.jgss.GSSCredentialImpl;
import sun.security.jgss.GSSManagerImpl;
import sun.security.jgss.krb5.Krb5InitCredential;
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.net.URI;
@@ -341,6 +341,17 @@ public class KeycloakUriBuilder {
return this;
}
/**
* Set fragment, but not encode it. It assumes that given fragment was already properly encoded
*
* @param fragment
* @return
*/
public KeycloakUriBuilder encodedFragment(String fragment) {
this.fragment = fragment;
return this;
}
/**
* Only replace path params in path of URI. This changes state of URIBuilder.
*
@@ -0,0 +1,56 @@
package org.keycloak.common.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import org.keycloak.common.constants.GenericConstants;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class KeystoreUtil {
static {
BouncyIntegration.init();
}
public enum KeystoreFormat {
JKS,
PKCS12
}
public static KeyStore loadKeyStore(String filename, String password) throws Exception {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
InputStream trustStream = (filename.startsWith(GenericConstants.PROTOCOL_CLASSPATH))
?KeystoreUtil.class.getResourceAsStream(filename.replace(GenericConstants.PROTOCOL_CLASSPATH, ""))
:new FileInputStream(new File(filename));
trustStore.load(trustStream, password.toCharArray());
trustStream.close();
return trustStore;
}
public static PrivateKey loadPrivateKeyFromKeystore(String keystoreFile, String storePassword, String keyPassword, String keyAlias, KeystoreFormat format) {
InputStream stream = FindFile.findFile(keystoreFile);
try {
KeyStore keyStore = null;
if (format == KeystoreFormat.JKS) {
keyStore = KeyStore.getInstance(format.toString());
} else {
keyStore = KeyStore.getInstance(format.toString(), "BC");
}
keyStore.load(stream, storePassword.toCharArray());
PrivateKey key = (PrivateKey) keyStore.getKey(keyAlias, keyPassword.toCharArray());
if (key == null) {
throw new RuntimeException("Couldn't load key with alias '" + keyAlias + "' from keystore");
}
return key;
} catch (Exception e) {
throw new RuntimeException("Failed to load private key: " + e.getMessage(), e);
}
}
}
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import javax.activation.MimetypesFileTypeMap;
import java.io.File;
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.util.ArrayList;
import java.util.Collection;
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
/*
* JBoss, Home of Professional Open Source.
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
@@ -13,7 +13,7 @@ public class ObjectUtil {
* @param str2
* @return true if both strings are null or equal
*/
public static boolean isEqualOrNull(Object str1, Object str2) {
public static boolean isEqualOrBothNull(Object str1, Object str2) {
if (str1 == null && str2 == null) {
return true;
}
@@ -24,4 +24,8 @@ public class ObjectUtil {
return str1.equals(str2);
}
public static String capitalize(String str) {
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
}
@@ -1,7 +1,7 @@
/**
*
*/
package org.keycloak.util;
package org.keycloak.common.util;
import java.util.regex.Pattern;
@@ -1,8 +1,6 @@
package org.keycloak.util;
package org.keycloak.common.util;
import net.iharder.Base64;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.io.Serializable;
import java.text.DateFormat;
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.io.BufferedReader;
import java.io.IOException;
@@ -19,7 +19,7 @@
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.keycloak.util;
package org.keycloak.common.util;
import java.io.File;
import java.util.Properties;
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.util.Properties;
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.util.Date;
@@ -1,4 +1,4 @@
package org.keycloak.util;
package org.keycloak.common.util;
import java.io.UnsupportedEncodingException;
import java.net.URI;
@@ -1,4 +1,4 @@
package org.keycloak.util.reflections;
package org.keycloak.common.util.reflections;
import java.beans.Introspector;
import java.io.Serializable;
@@ -1,4 +1,4 @@
package org.keycloak.util.reflections;
package org.keycloak.common.util.reflections;
import java.lang.reflect.AccessibleObject;
import java.security.PrivilegedAction;
@@ -1,4 +1,4 @@
package org.keycloak.util.reflections;
package org.keycloak.common.util.reflections;
import java.lang.reflect.Type;
+2
View File
@@ -0,0 +1,2 @@
version=${product.version}
build-time=${product.build-time}
@@ -1,86 +0,0 @@
/*
* Copyright 2015 Red Hat Inc. and/or its affiliates and other contributors
* as indicated by the @author tags. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.keycloak.connections.file;
import org.keycloak.models.KeycloakSession;
/**
* Provides the InMemoryModel and notifies the factory to save it when
* the session is done.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2015 Red Hat Inc.
*/
public class DefaultFileConnectionProvider implements FileConnectionProvider {
private final DefaultFileConnectionProviderFactory factory;
private final KeycloakSession session;
private final InMemoryModel inMemoryModel;
private boolean isRollbackOnly = false;
public DefaultFileConnectionProvider(DefaultFileConnectionProviderFactory factory,
KeycloakSession session,
InMemoryModel inMemoryModel) {
this.factory = factory;
this.session = session;
this.inMemoryModel = inMemoryModel;
}
@Override
public InMemoryModel getModel() {
return inMemoryModel;
}
@Override
public void sessionClosed(KeycloakSession session) {
factory.sessionClosed(session);
}
@Override
public void close() {
}
@Override
public void begin() {
}
@Override
public void commit() {
factory.commit(session);
}
@Override
public void rollback() {
factory.rollback(session);
}
@Override
public void setRollbackOnly() {
isRollbackOnly = true;
}
@Override
public boolean getRollbackOnly() {
return isRollbackOnly;
}
@Override
public boolean isActive() {
return factory.isActive(session);
}
}
@@ -1,210 +0,0 @@
/*
* Copyright 2015 Red Hat Inc. and/or its affiliates and other contributors
* as indicated by the @author tags. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.keycloak.connections.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.codehaus.jackson.JsonToken;
import org.jboss.logging.Logger;
import org.keycloak.Config;
import org.keycloak.exportimport.Strategy;
import org.keycloak.exportimport.util.ExportUtils;
import org.keycloak.exportimport.util.ImportUtils;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.models.RealmModel;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.util.JsonSerialization;
/**
* This class dispenses a FileConnectionProvider to Keycloak sessions. It
* makes sure that only one InMemoryModel is provided for each session and it
* handles thread contention for the file where the model is read or saved.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2015 Red Hat Inc.
*/
public class DefaultFileConnectionProviderFactory implements FileConnectionProviderFactory {
protected static final Logger logger = Logger.getLogger(DefaultFileConnectionProviderFactory.class);
private File kcdata;
private final Map<KeycloakSession, FileConnectionProvider> allProviders = new HashMap<KeycloakSession, FileConnectionProvider>();
@Override
public void init(Config.Scope config) {
String fileName = config.get("fileName");
if (fileName == null) {
fileName = "keycloak-model.json";
}
String directory = config.get("directory");
if (directory == null) {
directory = System.getProperty("jboss.server.data.dir");
}
if (directory == null) {
directory = ".";
}
kcdata = new File(directory, fileName);
}
public void sessionClosed(KeycloakSession session) {
synchronized(allProviders) {
allProviders.remove(session);
//logger.info("Removed session " + session.hashCode());
//logger.info("sessionClosed: Session count=" + allModels.size());
}
}
void readModelFile(KeycloakSession session) {
synchronized(allProviders) {
if (!kcdata.exists()) {
return;
}
FileInputStream fis = null;
try {
fis = new FileInputStream(kcdata);
Model model = JsonSerialization.readValue(fis, Model.class);
ImportUtils.importFromStream(session, JsonSerialization.mapper, fis, Strategy.IGNORE_EXISTING);
session.realms().getMigrationModel().setStoredVersion(model.getModelVersion());
ImportUtils.importRealms(session, model.getRealms(), Strategy.IGNORE_EXISTING);
} catch (IOException ioe) {
logger.error("Unable to read model file " + kcdata.getAbsolutePath(), ioe);
} finally {
//logger.info("Read model file for session=" + session.hashCode());
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
logger.error("Failed to close output stream.", e);
}
}
}
}
void writeModelFile(KeycloakSession session) {
synchronized(allProviders) {
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream(kcdata);
exportModel(session, outStream);
} catch (IOException e) {
logger.error("Unable to write model file " + kcdata.getAbsolutePath(), e);
} finally {
//logger.info("Wrote model file for session=" + session.hashCode());
try {
if (outStream != null) {
outStream.close();
}
} catch (IOException e) {
logger.error("Failed to close output stream.", e);
}
}
}
}
private void exportModel(KeycloakSession session, FileOutputStream outStream) throws IOException {
List<RealmModel> realms = session.realms().getRealms();
List<RealmRepresentation> reps = new ArrayList<RealmRepresentation>();
for (RealmModel realm : realms) {
reps.add(ExportUtils.exportRealm(session, realm, true));
}
Model model = new Model();
model.setRealms(reps);
model.setModelVersion(session.realms().getMigrationModel().getStoredVersion());
JsonSerialization.prettyMapper.writeValue(outStream, model);
}
@Override
public FileConnectionProvider create(KeycloakSession session) {
synchronized (allProviders) {
FileConnectionProvider fcProvider = allProviders.get(session);
if (fcProvider == null) {
InMemoryModel model = new InMemoryModel();
fcProvider = new DefaultFileConnectionProvider(this, session, model);
allProviders.put(session, fcProvider);
session.getTransaction().enlist(fcProvider);
readModelFile(session);
//logger.info("Added session " + session.hashCode() + " total sessions=" + allModels.size());
}
return fcProvider;
}
}
// commitCount is used for debugging. This allows you to easily run a test
// to a particular point and then examine the JSON file.
//private static int commitCount = 0;
void commit(KeycloakSession session) {
//commitCount++;
synchronized (allProviders) {
// in case commit was somehow called twice on the same session
if (!allProviders.containsKey(session)) return;
try {
writeModelFile(session);
} finally {
allProviders.remove(session);
//logger.info("Removed session " + session.hashCode());
//logger.info("*** commitCount=" + commitCount);
//logger.info("commit(): Session count=" + allModels.size());
}
// if (commitCount == 16) {Thread.dumpStack();System.exit(0);}
}
}
void rollback(KeycloakSession session) {
synchronized (allProviders) {
allProviders.remove(session);
//logger.info("rollback(): Session count=" + allModels.size());
}
}
boolean isActive(KeycloakSession session) {
synchronized (allProviders) {
return allProviders.containsKey(session);
}
}
@Override
public void close() {
}
@Override
public String getId() {
return "default";
}
@Override
public void postInit(KeycloakSessionFactory factory) {
}
}
@@ -1,109 +0,0 @@
/*
* Copyright 2015 Red Hat Inc. and/or its affiliates and other contributors
* as indicated by the @author tags. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.keycloak.connections.file;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserModel;
/**
* This class provides an in-memory copy of the entire model for each
* Keycloak session. At the start of the session, the model is read
* from JSON. When the session's transaction ends, the model is written back
* out.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2015 Red Hat Inc.
*/
public class InMemoryModel {
private final Map<String, RealmModel> allRealms = new HashMap<String, RealmModel>();
// realmId, userId, userModel
private final Map<String, Map<String,UserModel>> allUsers = new HashMap<String, Map<String,UserModel>>();
private String modelVersion;
public InMemoryModel() {
}
public void putRealm(String id, RealmModel realm) {
allRealms.put(id, realm);
allUsers.put(id, new HashMap<String, UserModel>());
}
public String getModelVersion() {
return modelVersion;
}
public void setModelVersion(String modelVersion) {
this.modelVersion = modelVersion;
}
public RealmModel getRealm(String id) {
return allRealms.get(id);
}
public Collection<RealmModel> getRealms() {
return allRealms.values();
}
public RealmModel getRealmByName(String name) {
for (RealmModel realm : getRealms()) {
if (realm.getName().equals(name)) return realm;
}
return null;
}
public boolean removeRealm(String id) {
allUsers.remove(id);
return (allRealms.remove(id) != null);
}
protected Map<String, UserModel> realmUsers(String realmId) {
Map<String, UserModel> realmUsers = allUsers.get(realmId);
if (realmUsers == null) throw new NullPointerException("Realm users not found for id=" + realmId);
return realmUsers;
}
public void putUser(String realmId, String userId, UserModel user) {
realmUsers(realmId).put(userId, user);
}
public UserModel getUser(String realmId, String userId) {
return realmUsers(realmId).get(userId);
}
public boolean hasUserWithUsername(String realmId, String username) {
for (UserModel user : getUsers(realmId)) {
if (user.getUsername().equals(username)) return true;
}
return false;
}
public Collection<UserModel> getUsers(String realmId) {
return realmUsers(realmId).values();
}
public boolean removeUser(String realmId, String userId) {
return (realmUsers(realmId).remove(userId) != null);
}
}
@@ -1,30 +0,0 @@
package org.keycloak.connections.file;
import org.keycloak.representations.idm.RealmRepresentation;
import java.util.List;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class Model {
private String modelVersion;
private List<RealmRepresentation> realms;
public String getModelVersion() {
return modelVersion;
}
public void setModelVersion(String modelVersion) {
this.modelVersion = modelVersion;
}
public List<RealmRepresentation> getRealms() {
return realms;
}
public void setRealms(List<RealmRepresentation> realms) {
this.realms = realms;
}
}
@@ -1 +0,0 @@
org.keycloak.connections.file.DefaultFileConnectionProviderFactory
@@ -1 +0,0 @@
org.keycloak.connections.file.FileConnectionSpi
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.4.0.Final</version>
<version>1.7.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -12,8 +12,8 @@ import org.jboss.logging.Logger;
import org.keycloak.Config;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.util.EnvUtil;
import org.keycloak.util.KeystoreUtil;
import org.keycloak.common.util.EnvUtil;
import org.keycloak.common.util.KeystoreUtil;
import java.io.IOException;
import java.io.InputStream;
+2 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.4.0.Final</version>
<version>1.7.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -27,5 +27,6 @@
<artifactId>infinispan-core</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
@@ -66,6 +66,19 @@ public class DefaultInfinispanConnectionProviderFactory implements InfinispanCon
} else {
initEmbedded();
}
// Backwards compatibility
if (cacheManager.getCacheConfiguration(InfinispanConnectionProvider.OFFLINE_SESSION_CACHE_NAME) == null) {
logger.debugf("No configuration provided for '%s' cache. Using '%s' configuration as template",
InfinispanConnectionProvider.OFFLINE_SESSION_CACHE_NAME, InfinispanConnectionProvider.SESSION_CACHE_NAME);
Configuration sessionCacheConfig = cacheManager.getCacheConfiguration(InfinispanConnectionProvider.SESSION_CACHE_NAME);
if (sessionCacheConfig != null) {
ConfigurationBuilder confBuilder = new ConfigurationBuilder().read(sessionCacheConfig);
Configuration offlineSessionConfig = confBuilder.build();
cacheManager.defineConfiguration(InfinispanConnectionProvider.OFFLINE_SESSION_CACHE_NAME, offlineSessionConfig);
}
}
}
}
}
@@ -11,6 +11,7 @@ public interface InfinispanConnectionProvider extends Provider {
static final String REALM_CACHE_NAME = "realms";
static final String USER_CACHE_NAME = "users";
static final String SESSION_CACHE_NAME = "sessions";
static final String OFFLINE_SESSION_CACHE_NAME = "offlineSessions";
static final String LOGIN_FAILURE_CACHE_NAME = "loginFailures";
<K, V> Cache<K, V> getCache(String name);
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.4.0.Final</version>
<version>1.7.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -231,7 +231,7 @@ public class LiquibaseJpaUpdaterProvider implements JpaUpdaterProvider {
}
private String getTable(String table, String defaultSchema) {
public static String getTable(String table, String defaultSchema) {
return defaultSchema != null ? defaultSchema + "." + table : table;
}
@@ -12,6 +12,7 @@ import liquibase.statement.SqlStatement;
import liquibase.statement.core.UpdateStatement;
import liquibase.structure.core.Schema;
import liquibase.structure.core.Table;
import org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider;
import org.keycloak.models.utils.KeycloakModelUtils;
import java.sql.Connection;
@@ -36,7 +37,7 @@ public class AddRealmCodeSecret implements CustomSqlChange {
String correctedTableName = database.correctObjectName("REALM", Table.class);
if (SnapshotGeneratorFactory.getInstance().has(new Table().setName(correctedTableName), database)) {
ResultSet resultSet = connection.createStatement().executeQuery("SELECT ID FROM REALM WHERE CODE_SECRET IS NULL");
ResultSet resultSet = connection.createStatement().executeQuery("SELECT ID FROM " + LiquibaseJpaUpdaterProvider.getTable(correctedTableName, database.getDefaultSchemaName()) + " WHERE CODE_SECRET IS NULL");
while (resultSet.next()) {
String id = resultSet.getString(1);
@@ -16,6 +16,7 @@ import liquibase.snapshot.SnapshotGeneratorFactory;
import liquibase.statement.SqlStatement;
import liquibase.structure.core.Table;
import org.jboss.logging.Logger;
import org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider;
import org.keycloak.connections.jpa.updater.liquibase.ThreadLocalSessionContext;
import org.keycloak.models.KeycloakSession;
import org.keycloak.services.DefaultKeycloakSessionFactory;
@@ -88,7 +89,7 @@ public abstract class CustomKeycloakTask implements CustomSqlChange {
try {
String correctedTableName = database.correctObjectName("REALM", Table.class);
if (SnapshotGeneratorFactory.getInstance().has(new Table().setName(correctedTableName), database)) {
ResultSet resultSet = connection.createStatement().executeQuery("SELECT ID FROM REALM");
ResultSet resultSet = connection.createStatement().executeQuery("SELECT ID FROM " + getTableName(correctedTableName));
try {
return (resultSet.next());
} finally {
@@ -108,4 +109,9 @@ public abstract class CustomKeycloakTask implements CustomSqlChange {
protected abstract void generateStatementsImpl() throws CustomChangeException;
protected abstract String getTaskId();
// get Table name for sql selects
protected String getTableName(String tableName) {
return LiquibaseJpaUpdaterProvider.getTable(tableName, database.getDefaultSchemaName());
}
}
@@ -11,6 +11,7 @@ import liquibase.statement.core.InsertStatement;
import liquibase.statement.core.UpdateStatement;
import liquibase.structure.core.Table;
import org.keycloak.Config;
import org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider;
import org.keycloak.migration.MigrationProvider;
import org.keycloak.models.AdminRoles;
import org.keycloak.models.ClaimMask;
@@ -49,7 +50,10 @@ public class JpaUpdate1_2_0_Beta1 extends CustomKeycloakTask {
String identityProviderTableName = database.correctObjectName("IDENTITY_PROVIDER", Table.class);
String idpConfigTableName = database.correctObjectName("IDENTITY_PROVIDER_CONFIG", Table.class);
PreparedStatement statement = jdbcConnection.prepareStatement("select RSC.NAME, VALUE, REALM_ID, UPDATE_PROFILE_ON_SOC_LOGIN from REALM_SOCIAL_CONFIG RSC,REALM where RSC.REALM_ID = REALM.ID ORDER BY RSC.REALM_ID, RSC.NAME");
String realmSocialConfigTable = getTableName("REALM_SOCIAL_CONFIG");
String realmTableName = getTableName("REALM");
PreparedStatement statement = jdbcConnection.prepareStatement("select RSC.NAME, VALUE, REALM_ID, UPDATE_PROFILE_ON_SOC_LOGIN from " + realmSocialConfigTable + " RSC," + realmTableName +
" REALM where RSC.REALM_ID = REALM.ID ORDER BY RSC.REALM_ID, RSC.NAME");
try {
ResultSet resultSet = statement.executeQuery();
try {
@@ -124,7 +128,7 @@ public class JpaUpdate1_2_0_Beta1 extends CustomKeycloakTask {
protected void convertSocialToIdFedUsers() throws SQLException, DatabaseException {
String federatedIdentityTableName = database.correctObjectName("FEDERATED_IDENTITY", Table.class);
PreparedStatement statement = jdbcConnection.prepareStatement("select REALM_ID, USER_ID, SOCIAL_PROVIDER, SOCIAL_USER_ID, SOCIAL_USERNAME from USER_SOCIAL_LINK");
PreparedStatement statement = jdbcConnection.prepareStatement("select REALM_ID, USER_ID, SOCIAL_PROVIDER, SOCIAL_USER_ID, SOCIAL_USERNAME from " + getTableName("USER_SOCIAL_LINK"));
try {
ResultSet resultSet = statement.executeQuery();
try {
@@ -170,7 +174,7 @@ public class JpaUpdate1_2_0_Beta1 extends CustomKeycloakTask {
String adminRoleId = getAdminRoleId();
String masterRealmId = Config.getAdminRealm();
PreparedStatement statement = jdbcConnection.prepareStatement("select NAME from REALM");
PreparedStatement statement = jdbcConnection.prepareStatement("select NAME from " + getTableName("REALM"));
try {
ResultSet resultSet = statement.executeQuery();
try {
@@ -178,7 +182,7 @@ public class JpaUpdate1_2_0_Beta1 extends CustomKeycloakTask {
String realmName = resultSet.getString("NAME");
String masterAdminAppName = realmName + "-realm";
PreparedStatement statement2 = jdbcConnection.prepareStatement("select ID from CLIENT where REALM_ID = ? AND NAME = ?");
PreparedStatement statement2 = jdbcConnection.prepareStatement("select ID from " + getTableName("CLIENT") + " where REALM_ID = ? AND NAME = ?");
statement2.setString(1, masterRealmId);
statement2.setString(2, masterAdminAppName);
@@ -209,7 +213,7 @@ public class JpaUpdate1_2_0_Beta1 extends CustomKeycloakTask {
}
private String getAdminRoleId() throws SQLException, DatabaseException {
PreparedStatement statement = jdbcConnection.prepareStatement("select ID from KEYCLOAK_ROLE where NAME = ? AND REALM = ?");
PreparedStatement statement = jdbcConnection.prepareStatement("select ID from " + getTableName("KEYCLOAK_ROLE") + " where NAME = ? AND REALM = ?");
statement.setString(1, AdminRoles.ADMIN);
statement.setString(2, Config.getAdminRealm());
@@ -231,7 +235,8 @@ public class JpaUpdate1_2_0_Beta1 extends CustomKeycloakTask {
protected void addNewRealmAdminRoles() throws SQLException, DatabaseException {
PreparedStatement statement = jdbcConnection.prepareStatement("select CLIENT.ID REALM_ADMIN_APP_ID, CLIENT.REALM_ID REALM_ID, KEYCLOAK_ROLE.ID ADMIN_ROLE_ID from CLIENT,KEYCLOAK_ROLE where KEYCLOAK_ROLE.APPLICATION = CLIENT.ID AND CLIENT.NAME = 'realm-management' AND KEYCLOAK_ROLE.NAME = ?");
PreparedStatement statement = jdbcConnection.prepareStatement("select CLIENT.ID REALM_ADMIN_APP_ID, CLIENT.REALM_ID REALM_ID, KEYCLOAK_ROLE.ID ADMIN_ROLE_ID from " +
getTableName("CLIENT") + " CLIENT," + getTableName("KEYCLOAK_ROLE") + " KEYCLOAK_ROLE where KEYCLOAK_ROLE.APPLICATION = CLIENT.ID AND CLIENT.NAME = 'realm-management' AND KEYCLOAK_ROLE.NAME = ?");
statement.setString(1, AdminRoles.REALM_ADMIN);
try {
@@ -280,7 +285,7 @@ public class JpaUpdate1_2_0_Beta1 extends CustomKeycloakTask {
String protocolMapperTableName = database.correctObjectName("PROTOCOL_MAPPER", Table.class);
String protocolMapperCfgTableName = database.correctObjectName("PROTOCOL_MAPPER_CONFIG", Table.class);
PreparedStatement statement = jdbcConnection.prepareStatement("select ID, NAME, ALLOWED_CLAIMS_MASK from CLIENT");
PreparedStatement statement = jdbcConnection.prepareStatement("select ID, NAME, ALLOWED_CLAIMS_MASK from " + getTableName("CLIENT"));
try {
ResultSet resultSet = statement.executeQuery();
@@ -293,7 +298,7 @@ public class JpaUpdate1_2_0_Beta1 extends CustomKeycloakTask {
}
Object acmObj = resultSet.getObject("ALLOWED_CLAIMS_MASK");
long mask = (acmObj != null) ? (Long) acmObj : ClaimMask.ALL;
long mask = (acmObj != null) ? ((Number) acmObj).longValue() : ClaimMask.ALL;
MigrationProvider migrationProvider = this.kcSession.getProvider(MigrationProvider.class);
List<ProtocolMapperRepresentation> protocolMappers = migrationProvider.getMappersForClaimMask(mask);
Loaded 100 of 3349 files, more files were not shown because too many files have changed in this diff. Show more