keycloakify 10.1.0-rc.1 → 10.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/PUBLIC_URL.js +2 -2
  2. package/PUBLIC_URL.js.map +1 -1
  3. package/account/KcContext/kcContextMocks.js +3 -3
  4. package/account/KcContext/kcContextMocks.js.map +1 -1
  5. package/bin/193.index.js +198 -62
  6. package/bin/{365.index.js → 20.index.js} +302 -263
  7. package/bin/31.index.js +15 -23
  8. package/bin/{430.index.js → 33.index.js} +579 -4
  9. package/bin/{678.index.js → 36.index.js} +2 -577
  10. package/bin/{440.index.js → 499.index.js} +259 -181
  11. package/bin/526.index.js +12 -793
  12. package/bin/599.index.js +4 -1
  13. package/bin/780.index.js +1 -1
  14. package/bin/{525.index.js → 903.index.js} +4840 -97
  15. package/bin/932.index.js +115 -886
  16. package/bin/main.js +4 -4
  17. package/bin/shared/buildContext.d.ts +0 -2
  18. package/bin/shared/buildContext.js.map +1 -1
  19. package/bin/shared/constants.d.ts +5 -6
  20. package/bin/shared/constants.js +5 -6
  21. package/bin/shared/constants.js.map +1 -1
  22. package/bin/shared/copyKeycloakResourcesToPublic.d.ts +2 -4
  23. package/bin/shared/copyKeycloakResourcesToPublic.js.map +1 -1
  24. package/login/KcContext/KcContext.d.ts +9 -18
  25. package/login/KcContext/KcContext.js.map +1 -1
  26. package/login/KcContext/kcContextMocks.js +6 -10
  27. package/login/KcContext/kcContextMocks.js.map +1 -1
  28. package/login/Template.js +4 -59
  29. package/login/Template.js.map +1 -1
  30. package/login/Template.useStylesAndScripts.d.ts +17 -0
  31. package/login/Template.useStylesAndScripts.js +69 -0
  32. package/login/Template.useStylesAndScripts.js.map +1 -0
  33. package/login/pages/Login.js +1 -1
  34. package/login/pages/Login.js.map +1 -1
  35. package/login/pages/LoginIdpLinkConfirmOverride.js +0 -1
  36. package/login/pages/LoginIdpLinkConfirmOverride.js.map +1 -1
  37. package/login/pages/LoginPasskeysConditionalAuthenticate.js +6 -49
  38. package/login/pages/LoginPasskeysConditionalAuthenticate.js.map +1 -1
  39. package/login/pages/LoginPasskeysConditionalAuthenticate.useScript.d.ts +20 -0
  40. package/login/pages/LoginPasskeysConditionalAuthenticate.useScript.js +49 -0
  41. package/login/pages/LoginPasskeysConditionalAuthenticate.useScript.js.map +1 -0
  42. package/login/pages/LoginRecoveryAuthnCodeConfig.js +4 -126
  43. package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
  44. package/login/pages/LoginRecoveryAuthnCodeConfig.useScript.d.ts +9 -0
  45. package/login/pages/LoginRecoveryAuthnCodeConfig.useScript.js +133 -0
  46. package/login/pages/LoginRecoveryAuthnCodeConfig.useScript.js.map +1 -0
  47. package/login/pages/LoginUsername.js +1 -1
  48. package/login/pages/LoginUsername.js.map +1 -1
  49. package/login/pages/Register.js +6 -3
  50. package/login/pages/Register.js.map +1 -1
  51. package/login/pages/WebauthnAuthenticate.js +13 -116
  52. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  53. package/login/pages/WebauthnAuthenticate.useScript.d.ts +21 -0
  54. package/login/pages/WebauthnAuthenticate.useScript.js +41 -0
  55. package/login/pages/WebauthnAuthenticate.useScript.js.map +1 -0
  56. package/login/pages/WebauthnRegister.js +8 -178
  57. package/login/pages/WebauthnRegister.js.map +1 -1
  58. package/login/pages/WebauthnRegister.useScript.d.ts +27 -0
  59. package/login/pages/WebauthnRegister.useScript.js +49 -0
  60. package/login/pages/WebauthnRegister.useScript.js.map +1 -0
  61. package/package.json +125 -15
  62. package/res/account-v1/account.ftl +70 -0
  63. package/res/account-v1/applications.ftl +76 -0
  64. package/res/account-v1/federatedIdentity.ftl +42 -0
  65. package/res/account-v1/log.ftl +35 -0
  66. package/res/account-v1/messages/messages_ar.properties +406 -0
  67. package/res/account-v1/messages/messages_ca.properties +147 -0
  68. package/res/account-v1/messages/messages_cs.properties +171 -0
  69. package/res/account-v1/messages/messages_da.properties +339 -0
  70. package/res/account-v1/messages/messages_de.properties +353 -0
  71. package/res/account-v1/messages/messages_en.properties +404 -0
  72. package/res/account-v1/messages/messages_es.properties +147 -0
  73. package/res/account-v1/messages/messages_fi.properties +400 -0
  74. package/res/account-v1/messages/messages_fr.properties +180 -0
  75. package/res/account-v1/messages/messages_hu.properties +334 -0
  76. package/res/account-v1/messages/messages_it.properties +336 -0
  77. package/res/account-v1/messages/messages_ja.properties +335 -0
  78. package/res/account-v1/messages/messages_lt.properties +154 -0
  79. package/res/account-v1/messages/messages_lv.properties +197 -0
  80. package/res/account-v1/messages/messages_nl.properties +371 -0
  81. package/res/account-v1/messages/messages_no.properties +152 -0
  82. package/res/account-v1/messages/messages_pl.properties +248 -0
  83. package/res/account-v1/messages/messages_pt_BR.properties +349 -0
  84. package/res/account-v1/messages/messages_ru.properties +235 -0
  85. package/res/account-v1/messages/messages_sk.properties +196 -0
  86. package/res/account-v1/messages/messages_sv.properties +150 -0
  87. package/res/account-v1/messages/messages_tr.properties +315 -0
  88. package/res/account-v1/messages/messages_zh_CN.properties +153 -0
  89. package/res/account-v1/password.ftl +59 -0
  90. package/res/account-v1/resource-detail.ftl +277 -0
  91. package/res/account-v1/resources/css/account.css +277 -0
  92. package/res/account-v1/resources/img/icon-sidebar-active.png +0 -0
  93. package/res/account-v1/resources/img/keycloak-logo.png +0 -0
  94. package/res/account-v1/resources/img/logo.png +0 -0
  95. package/res/account-v1/resources/resources-common/img/favicon.ico +0 -0
  96. package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/css/patternfly-additions.min.css +5 -0
  97. package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/css/patternfly.min.css +8 -0
  98. package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff2 +0 -0
  99. package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2 +0 -0
  100. package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2 +0 -0
  101. package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2 +0 -0
  102. package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf +0 -0
  103. package/res/account-v1/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.woff +0 -0
  104. package/res/account-v1/resources.ftl +403 -0
  105. package/res/account-v1/sessions.ftl +44 -0
  106. package/res/account-v1/template.ftl +88 -0
  107. package/res/account-v1/theme.properties +14 -0
  108. package/res/account-v1/totp.ftl +141 -0
  109. package/res/public/.keycloakify/account/css/account.css +277 -0
  110. package/res/public/.keycloakify/account/img/icon-sidebar-active.png +0 -0
  111. package/res/public/.keycloakify/account/img/keycloak-logo.png +0 -0
  112. package/res/public/.keycloakify/account/img/logo.png +0 -0
  113. package/res/public/.keycloakify/account/resources-common/img/favicon.ico +0 -0
  114. package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/css/patternfly-additions.min.css +5 -0
  115. package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/css/patternfly.min.css +8 -0
  116. package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff2 +0 -0
  117. package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2 +0 -0
  118. package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2 +0 -0
  119. package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2 +0 -0
  120. package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf +0 -0
  121. package/res/public/.keycloakify/account/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.woff +0 -0
  122. package/res/public/.keycloakify/login/css/login.css +629 -0
  123. package/res/public/.keycloakify/login/img/feedback-error-arrow-down.png +0 -0
  124. package/res/public/.keycloakify/login/img/feedback-error-sign.png +0 -0
  125. package/res/public/.keycloakify/login/img/feedback-success-arrow-down.png +0 -0
  126. package/res/public/.keycloakify/login/img/feedback-success-sign.png +0 -0
  127. package/res/public/.keycloakify/login/img/feedback-warning-arrow-down.png +0 -0
  128. package/res/public/.keycloakify/login/img/feedback-warning-sign.png +0 -0
  129. package/res/public/.keycloakify/login/img/keycloak-bg.png +0 -0
  130. package/res/public/.keycloakify/login/img/keycloak-logo-text.png +0 -0
  131. package/res/public/.keycloakify/login/img/keycloak-logo.png +0 -0
  132. package/res/public/.keycloakify/login/js/authChecker.js +49 -0
  133. package/res/public/.keycloakify/login/js/common.js +48 -0
  134. package/res/public/.keycloakify/login/js/kcMultivalued.js +106 -0
  135. package/res/public/.keycloakify/login/js/kcNumberFormat.js +21 -0
  136. package/res/public/.keycloakify/login/js/kcNumberUnFormat.js +19 -0
  137. package/res/public/.keycloakify/login/js/menu-button-links.js +315 -0
  138. package/{src/bin/shared/downloadKeycloakDefaultTheme/extra-assets → res/public/.keycloakify/login/js}/passkeysConditionalAuth.js +1 -1
  139. package/res/public/.keycloakify/login/js/passwordVisibility.js +15 -0
  140. package/res/public/.keycloakify/login/js/userProfile.js +71 -0
  141. package/res/public/.keycloakify/login/js/webauthnRegister.js +140 -0
  142. package/res/public/.keycloakify/login/resources-common/img/favicon.ico +0 -0
  143. package/res/public/.keycloakify/login/resources-common/lib/pficon/pficon.css +22 -0
  144. package/res/public/.keycloakify/login/resources-common/lib/pficon/pficon.woff2 +0 -0
  145. package/res/public/.keycloakify/login/resources-common/node_modules/@patternfly/patternfly/patternfly.min.css +2 -0
  146. package/res/public/.keycloakify/login/resources-common/node_modules/jquery/dist/jquery.min.js +2 -0
  147. package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/css/patternfly-additions.min.css +5 -0
  148. package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/css/patternfly.min.css +8 -0
  149. package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.ttf +0 -0
  150. package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff +0 -0
  151. package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff2 +0 -0
  152. package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2 +0 -0
  153. package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2 +0 -0
  154. package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2 +0 -0
  155. package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf +0 -0
  156. package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.woff +0 -0
  157. package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff2 +0 -0
  158. package/res/public/.keycloakify/login/resources-common/node_modules/patternfly/dist/img/bg-login.jpg +0 -0
  159. package/res/public/.keycloakify/login/resources-common/node_modules/rfc4648/lib/rfc4648.js +178 -0
  160. package/src/PUBLIC_URL.ts +5 -3
  161. package/src/account/KcContext/kcContextMocks.ts +3 -3
  162. package/src/bin/copy-keycloak-resources-to-public.ts +1 -1
  163. package/src/bin/initialize-account-theme/initializeAccountTheme_singlePage.ts +4 -1
  164. package/src/bin/initialize-email-theme.ts +28 -8
  165. package/src/bin/keycloakify/buildJars/buildJar.ts +3 -7
  166. package/src/bin/keycloakify/generateFtl/generateFtl.ts +3 -7
  167. package/src/bin/keycloakify/generateResources/generateResourcesForMainTheme.ts +65 -90
  168. package/src/bin/keycloakify/keycloakify.ts +38 -21
  169. package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +2 -2
  170. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +3 -3
  171. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +3 -3
  172. package/src/bin/shared/buildContext.ts +1 -8
  173. package/src/bin/shared/constants.ts +5 -7
  174. package/src/bin/shared/copyKeycloakResourcesToPublic.ts +30 -40
  175. package/src/bin/start-keycloak/start-keycloak.ts +10 -12
  176. package/src/login/KcContext/KcContext.ts +9 -18
  177. package/src/login/KcContext/kcContextMocks.ts +5 -13
  178. package/src/login/Template.tsx +4 -67
  179. package/src/login/Template.useStylesAndScripts.ts +94 -0
  180. package/src/login/pages/Login.tsx +1 -1
  181. package/src/login/pages/LoginIdpLinkConfirmOverride.tsx +0 -1
  182. package/src/login/pages/LoginPasskeysConditionalAuthenticate.tsx +6 -81
  183. package/src/login/pages/LoginPasskeysConditionalAuthenticate.useScript.tsx +72 -0
  184. package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +4 -126
  185. package/src/login/pages/LoginRecoveryAuthnCodeConfig.useScript.tsx +142 -0
  186. package/src/login/pages/LoginUsername.tsx +1 -1
  187. package/src/login/pages/Register.tsx +35 -13
  188. package/src/login/pages/WebauthnAuthenticate.tsx +20 -133
  189. package/src/login/pages/WebauthnAuthenticate.useScript.tsx +64 -0
  190. package/src/login/pages/WebauthnRegister.tsx +8 -195
  191. package/src/login/pages/WebauthnRegister.useScript.tsx +93 -0
  192. package/src/tools/useInsertScriptTags.ts +14 -4
  193. package/src/vite-plugin/vite-plugin.ts +11 -15
  194. package/tools/useInsertScriptTags.d.ts +2 -2
  195. package/tools/useInsertScriptTags.js +8 -2
  196. package/tools/useInsertScriptTags.js.map +1 -1
  197. package/vite-plugin/index.js +3357 -47132
  198. package/bin/697.index.js +0 -4749
  199. package/bin/shared/downloadKeycloakStaticResources.d.ts +0 -9
  200. package/bin/shared/downloadKeycloakStaticResources.js.map +0 -1
  201. package/src/bin/keycloakify/generateResources/bringInAccountV1.ts +0 -89
  202. package/src/bin/shared/downloadKeycloakDefaultTheme/downloadKeycloakDefaultTheme.ts +0 -338
  203. package/src/bin/shared/downloadKeycloakDefaultTheme/index.ts +0 -1
  204. package/src/bin/shared/downloadKeycloakStaticResources.ts +0 -53
  205. /package/{src/bin/shared/downloadKeycloakDefaultTheme/extra-assets → res/public/.keycloakify/login/js}/webauthnAuthenticate.js +0 -0
@@ -0,0 +1,277 @@
1
+ <#import "template.ftl" as layout>
2
+ <@layout.mainLayout active='authorization' bodyClass='authorization'; section>
3
+
4
+ <style>
5
+ .search-box,.close-icon,.search-wrapper {
6
+ position: relative;
7
+ }
8
+ .search-wrapper {
9
+ width: 500px;
10
+ margin: auto;
11
+ margin-top: 50px;
12
+ }
13
+ .search-box {
14
+ font-weight: 600;
15
+ color: white;
16
+ border: 1px solid #006e9c;
17
+ outline: 0;
18
+ border-radius: 15px;
19
+ background-color: #0085cf;
20
+ padding: 2px 5px;
21
+
22
+ }
23
+ .search-box:focus {
24
+ box-shadow: 0 0 15px 5px #b0e0ee;
25
+ border: 2px solid #bebede;
26
+ }
27
+ .close-icon {
28
+ border:1px solid transparent;
29
+ background-color: transparent;
30
+ display: inline-block;
31
+ float: right;
32
+ outline: 0;
33
+ cursor: pointer;
34
+ }
35
+ .close-icon:after {
36
+ display: block;
37
+ width: 15px;
38
+ height: 15px;
39
+ background-color: #FA9595;
40
+ z-index:1;
41
+ right: 35px;
42
+ top: 0;
43
+ bottom: 0;
44
+ margin: auto;
45
+ padding: 2px;
46
+ border-radius: 50%;
47
+ text-align: center;
48
+ color: white;
49
+ font-weight: normal;
50
+ font-size: 12px;
51
+ box-shadow: 0 0 2px #E50F0F;
52
+ cursor: pointer;
53
+ }
54
+ .search-box:not(:valid) ~ .close-icon {
55
+ display: none;
56
+ }
57
+ </style>
58
+ <script>
59
+ function removeScopeElm(elm) {
60
+ elm.parentNode.removeChild(elm);
61
+ }
62
+
63
+ function removeAllScopes(id) {
64
+ var scopesElm = document.getElementsByName('removeScope-' + id);
65
+
66
+ for (i = 0; i < scopesElm.length; i++) {
67
+ var td = scopesElm[i].parentNode.parentNode;
68
+ var tr = td.parentNode;
69
+ var tbody = tr.parentNode;
70
+ tbody.removeChild(tr);
71
+ }
72
+ }
73
+
74
+ function getChildren(parent, childId) {
75
+ var childNodes = [];
76
+
77
+ for (i = 0; i < parent.childNodes.length; i++) {
78
+ if (parent.childNodes[i].id == childId) {
79
+ childNodes.push(parent.childNodes[i]);
80
+ }
81
+ }
82
+
83
+ return childNodes;
84
+ }
85
+ </script>
86
+
87
+ <div class="row">
88
+ <div class="col-md-10">
89
+ <h2>
90
+ <a href="${url.resourceUrl}">${msg("myResources")}</a> <i class="fa fa-angle-right"></i> <#if authorization.resource.displayName??>${authorization.resource.displayName}<#else>${authorization.resource.name}</#if>
91
+ </h2>
92
+ </div>
93
+ </div>
94
+
95
+ <#if authorization.resource.iconUri??>
96
+ <img src="${authorization.resource.iconUri}">
97
+ <br/>
98
+ </#if>
99
+
100
+ <div class="row">
101
+ <div class="col-md-10">
102
+ <h3>
103
+ ${msg("peopleAccessResource")}
104
+ </h3>
105
+ </div>
106
+ </div>
107
+ <div class="row">
108
+ <div class="col-md-12">
109
+ <table class="table table-striped table-bordered">
110
+ <thead>
111
+ <tr>
112
+ <th>${msg("user")}</th>
113
+ <th>${msg("permission")}</th>
114
+ <th>${msg("date")}</th>
115
+ <th>${msg("action")}</th>
116
+ </tr>
117
+ </thead>
118
+ <tbody>
119
+ <#if authorization.resource.shares?size != 0>
120
+ <#list authorization.resource.shares as permission>
121
+ <form action="${url.getResourceGrant(authorization.resource.id)}" name="revokeForm-${authorization.resource.id}-${permission.requester.username}" method="post">
122
+ <input type="hidden" name="action" value="revoke">
123
+ <input type="hidden" name="requester" value="${permission.requester.username}">
124
+ <input type="hidden" id="stateChecker" name="stateChecker" value="${stateChecker}">
125
+ <tr>
126
+ <td>
127
+ <#if permission.requester.email??>${permission.requester.email}<#else>${permission.requester.username}</#if>
128
+ </td>
129
+ <td>
130
+ <#if permission.scopes?size != 0>
131
+ <#list permission.scopes as scope>
132
+ <#if scope.granted && scope.scope??>
133
+ <div class="search-box">
134
+ <#if scope.scope.displayName??>
135
+ ${scope.scope.displayName}
136
+ <#else>
137
+ ${scope.scope.name}
138
+ </#if>
139
+ <button class="close-icon" type="button" name="removeScope-${authorization.resource.id}-${permission.requester.username}" onclick="removeScopeElm(this.parentNode);document.forms['revokeForm-${authorization.resource.id}-${permission.requester.username}'].submit();"><i class="fa fa-times" aria-hidden="true"></i></button>
140
+ <input type="hidden" name="permission_id" value="${scope.id}"/>
141
+ </div>
142
+ <#else>
143
+ ${msg("anyPermission")}
144
+ </#if>
145
+ </#list>
146
+ <#else>
147
+ Any action
148
+ </#if>
149
+ </td>
150
+ <td>
151
+ ${permission.createdDate?datetime}
152
+ </td>
153
+ <td width="20%" align="middle" style="vertical-align: middle">
154
+ <a href="#" id="revoke-${authorization.resource.name}-${permission.requester.username}" onclick="removeAllScopes('${authorization.resource.id}-${permission.requester.username}');document.forms['revokeForm-${authorization.resource.id}-${permission.requester.username}'].submit();" type="submit" class="btn btn-primary">${msg("doRevoke")}</a>
155
+ </td>
156
+ </tr>
157
+ </form>
158
+ </#list>
159
+ <#else>
160
+ <tr>
161
+ <td colspan="4">${msg("resourceIsNotBeingShared")}</td>
162
+ </tr>
163
+ </#if>
164
+ </tbody>
165
+ </table>
166
+ </form>
167
+ </div>
168
+ </div>
169
+ <div class="row">
170
+ <div class="col-md-10">
171
+ <h3>
172
+ ${msg("resourceManagedPolicies")}
173
+ </h3>
174
+ </div>
175
+ </div>
176
+ <div class="row">
177
+ <div class="col-md-12">
178
+ <table class="table table-striped table-bordered">
179
+ <thead>
180
+ <tr>
181
+ <th>${msg("description")}</th>
182
+ <th>${msg("permission")}</th>
183
+ <th>${msg("action")}</th>
184
+ </tr>
185
+ </thead>
186
+ <tbody>
187
+ <#if authorization.resource.policies?size != 0>
188
+ <#list authorization.resource.policies as permission>
189
+ <form action="${url.getResourceGrant(authorization.resource.id)}" name="revokePolicyForm-${authorization.resource.id}-${permission.id}" method="post">
190
+ <input type="hidden" name="action" value="revokePolicy">
191
+ <input type="hidden" name="permission_id" value="${permission.id}"/>
192
+ <input type="hidden" id="stateChecker" name="stateChecker" value="${stateChecker}">
193
+ <tr>
194
+ <td>
195
+ <#if permission.description??>
196
+ ${permission.description}
197
+ </#if>
198
+ </td>
199
+ <td>
200
+ <#if permission.scopes?size != 0>
201
+ <#list permission.scopes as scope>
202
+ <div class="search-box">
203
+ <#if scope.displayName??>
204
+ ${scope.displayName}
205
+ <#else>
206
+ ${scope.name}
207
+ </#if>
208
+ <button class="close-icon" type="button" name="removePolicyScope-${authorization.resource.id}-${permission.id}-${scope.id}" onclick="removeScopeElm(this.parentNode);document.forms['revokePolicyForm-${authorization.resource.id}-${permission.id}'].submit();"><i class="fa fa-times" aria-hidden="true"></i></button>
209
+ <input type="hidden" name="permission_id" value="${permission.id}:${scope.id}"/>
210
+ </div>
211
+ </#list>
212
+ <#else>
213
+ ${msg("anyAction")}
214
+ </#if>
215
+ </td>
216
+ <td width="20%" align="middle" style="vertical-align: middle">
217
+ <a href="#" id="revokePolicy-${authorization.resource.name}-${permission.id}" onclick="document.forms['revokePolicyForm-${authorization.resource.id}-${permission.id}']['action'].value = 'revokePolicyAll';document.forms['revokePolicyForm-${authorization.resource.id}-${permission.id}'].submit();" type="submit" class="btn btn-primary">${msg("doRevoke")}</a>
218
+ </td>
219
+ </tr>
220
+ </form>
221
+ </#list>
222
+ <#else>
223
+ <tr>
224
+ <td colspan="3">
225
+ ${msg("resourceNoPermissionsGrantingAccess")}
226
+ </td>
227
+ </tr>
228
+ </#if>
229
+ </tbody>
230
+ </table>
231
+ </form>
232
+ </div>
233
+ </div>
234
+ <div class="row">
235
+ <div class="col-md-10">
236
+ <h3>
237
+ ${msg("shareWithOthers")}
238
+ </h3>
239
+ </div>
240
+ </div>
241
+ <div class="row">
242
+ <div class="col-md-10">
243
+ <form action="${url.getResourceShare(authorization.resource.id)}" name="shareForm" method="post">
244
+ <input type="hidden" id="stateChecker" name="stateChecker" value="${stateChecker}">
245
+ <div class="col-sm-3 col-md-3">
246
+ <label for="password" class="control-label">${msg("username")} or ${msg("email")} </label> <span class="required">*</span>
247
+ </div>
248
+ <div class="col-sm-8 col-md-8">
249
+ <div class="row">
250
+ <div class="col-md-12">
251
+ <input type="text" class="form-control" id="user_id" name="user_id" autofocus autocomplete="off">
252
+ </div>
253
+ <div class="col-md-12">
254
+ <br/>
255
+ <#list authorization.resource.scopes as scope>
256
+ <div id="scope" class="search-box">
257
+ <#if scope.displayName??>
258
+ ${scope.displayName}
259
+ <#else>
260
+ ${scope.name}
261
+ </#if>
262
+ <button class="close-icon" id="share-remove-scope-${authorization.resource.name}-${scope.name}" type="button" onclick="if (getChildren(this.parentNode.parentNode, 'scope').length > 1) {removeScopeElm(this.parentNode)}"><i class="fa fa-times" aria-hidden="true"></i></button>
263
+ <input type="hidden" name="scope_id" value="${scope.id}"/>
264
+ </div>
265
+ </#list>
266
+ </div>
267
+ <div class="col-md-12">
268
+ <br/>
269
+ <a href="#" onclick="document.forms['shareForm'].submit()" type="submit" id="share-button" class="btn btn-primary">${msg("share")}</a>
270
+ </div>
271
+ </div>
272
+ </div>
273
+ </form>
274
+ </div>
275
+ </div>
276
+ <br/>
277
+ </@layout.mainLayout>
@@ -0,0 +1,277 @@
1
+ html {
2
+ height: 100%;
3
+ }
4
+
5
+ body {
6
+ background-color: #F9F9F9;
7
+ margin: 0;
8
+ padding: 0;
9
+ height: 100%;
10
+ }
11
+
12
+ header .navbar {
13
+ margin-bottom: 0;
14
+ min-height: inherit;
15
+ }
16
+
17
+ .header .container {
18
+ position: relative;
19
+ }
20
+
21
+ .navbar-title {
22
+ background-image: url('../img/logo.png');
23
+ height: 25px;
24
+ background-repeat: no-repeat;
25
+ width: 123px;
26
+ margin: 3px 10px 5px;
27
+ text-indent: -99999px;
28
+ }
29
+
30
+ .navbar-pf .navbar-utility {
31
+ right: 20px;
32
+ top: -34px !important;
33
+ font-size: 12px;
34
+ }
35
+
36
+ .navbar-pf .navbar-utility > li > a {
37
+ color: #fff !important;
38
+ padding-bottom: 12px;
39
+ padding-top: 11px;
40
+ border-left: medium none;
41
+ }
42
+
43
+ .container {
44
+ height: 100%;
45
+ }
46
+
47
+ .content-area {
48
+ background-color: #fff;
49
+ border-color: #CECECE;
50
+ border-style: solid;
51
+ border-width: 0 1px;
52
+ height: 100%;
53
+ padding: 0 30px;
54
+ }
55
+
56
+ .margin-bottom {
57
+ margin-bottom: 10px;
58
+ }
59
+
60
+ /* Sidebar */
61
+
62
+ .bs-sidebar {
63
+ background-color: #f9f9f9;
64
+ padding-top: 44px;
65
+ padding-right: 0;
66
+ padding-left: 0;
67
+ z-index: 20;
68
+ }
69
+ .bs-sidebar ul {
70
+ list-style: none;
71
+ padding-left: 12px;
72
+ }
73
+
74
+ .bs-sidebar ul li {
75
+ margin-bottom: 0.5em;
76
+ margin-left: -1em;
77
+ }
78
+ .bs-sidebar ul li a {
79
+ font-size: 14px;
80
+ padding-left: 25px;
81
+ color: #4d5258;
82
+ line-height: 28px;
83
+ display: block;
84
+ border-width: 1px 0 1px 1px;
85
+ border-style: solid;
86
+ border-color: #f9f9f9;
87
+ }
88
+ .bs-sidebar ul li a:hover,
89
+ .bs-sidebar ul li a:focus {
90
+ text-decoration: none;
91
+ color: #777777;
92
+ border-right: 2px solid #aaa;
93
+ }
94
+ .bs-sidebar ul li.active a {
95
+ background-color: #c7e5f0;
96
+ border-color: #56bae0;
97
+ font-weight: bold;
98
+ background-image: url(../img/icon-sidebar-active.png);
99
+ background-repeat: no-repeat;
100
+ background-position: right center;
101
+ }
102
+
103
+ .bs-sidebar ul li.active a:hover {
104
+ border-right: none;
105
+ }
106
+
107
+
108
+ .content-area h2 {
109
+ font-family: "Open Sans", sans-serif;
110
+ font-weight: 100;
111
+ font-size: 24px;
112
+ margin-bottom: 25px;
113
+ margin-top: 25px;
114
+ }
115
+
116
+ .subtitle {
117
+ text-align: right;
118
+ margin-top: 30px;
119
+ color: #909090;
120
+ }
121
+
122
+ .required {
123
+ color: #CB2915;
124
+ }
125
+
126
+
127
+ .alert {
128
+ margin-top: 30px;
129
+ margin-bottom: 0;
130
+ }
131
+
132
+ .feedback-aligner .alert {
133
+ background-position: 1.27273em center;
134
+ background-repeat: no-repeat;
135
+ border-radius: 2px;
136
+ border-width: 1px;
137
+ color: #4D5258;
138
+ display: inline-block;
139
+ font-size: 1.1em;
140
+ line-height: 1.4em;
141
+ margin: 0;
142
+ padding: 0.909091em 3.63636em;
143
+ position: relative;
144
+ text-align: left;
145
+ }
146
+ .alert.alert-success {
147
+ background-color: #E4F1E1;
148
+ border-color: #4B9E39;
149
+ }
150
+ .alert.alert-error {
151
+ background-color: #F8E7E7;
152
+ border-color: #B91415;
153
+ }
154
+ .alert.alert-warning {
155
+ background-color: #FEF1E9;
156
+ border-color: #F17528;
157
+ }
158
+ .alert.alert-info {
159
+ background-color: #E4F3FA;
160
+ border-color: #5994B2;
161
+ }
162
+
163
+ .form-horizontal {
164
+ border-top: 1px solid #E9E8E8;
165
+ padding-top: 23px;
166
+ }
167
+
168
+ .form-horizontal .control-label {
169
+ color: #909090;
170
+ line-height: 1.4em;
171
+ padding-top: 5px;
172
+ position: relative;
173
+ text-align: right;
174
+ width: 100%;
175
+ }
176
+
177
+ .form-group {
178
+ position: relative;
179
+ }
180
+
181
+ .control-label + .required {
182
+ position: absolute;
183
+ right: -2px;
184
+ top: 0;
185
+ }
186
+
187
+ #kc-form-buttons {
188
+ text-align: right;
189
+ margin-top: 10px;
190
+ }
191
+
192
+ #kc-form-buttons .btn-primary {
193
+ float: right;
194
+ margin-left: 8px;
195
+ }
196
+
197
+ /* Authenticator page */
198
+
199
+ ol {
200
+ padding-left: 40px;
201
+ }
202
+
203
+ ol li {
204
+ font-size: 13px;
205
+ margin-bottom: 10px;
206
+ position: relative;
207
+ }
208
+
209
+ ol li img {
210
+ margin-top: 15px;
211
+ margin-bottom: 5px;
212
+ border: 1px solid #eee;
213
+ }
214
+
215
+ hr + .form-horizontal {
216
+ border: none;
217
+ padding-top: 0;
218
+ }
219
+
220
+ .kc-dropdown{
221
+ position: relative;
222
+ }
223
+ .kc-dropdown > a{
224
+ display:block;
225
+ padding: 11px 10px 12px;
226
+ line-height: 12px;
227
+ font-size: 12px;
228
+ color: #fff !important;
229
+ text-decoration: none;
230
+ }
231
+ .kc-dropdown > a::after{
232
+ content: "\2c5";
233
+ margin-left: 4px;
234
+ }
235
+ .kc-dropdown:hover > a{
236
+ background-color: rgba(0,0,0,0.2);
237
+ }
238
+ .kc-dropdown ul li a{
239
+ padding: 1px 11px;
240
+ font-size: 12px;
241
+ color: #000 !important;
242
+ border: 1px solid #fff;
243
+ text-decoration: none;
244
+ display:block;
245
+ line-height: 20px;
246
+ }
247
+ .kc-dropdown ul li a:hover{
248
+ color: #4d5258;
249
+ background-color: #d4edfa;
250
+ border-color: #b3d3e7;
251
+ }
252
+ .kc-dropdown ul{
253
+ position: absolute;
254
+ z-index: 2000;
255
+ list-style:none;
256
+ display:none;
257
+ padding: 5px 0px;
258
+ margin: 0px;
259
+ background-color: #fff !important;
260
+ border: 1px solid #b6b6b6;
261
+ border-radius: 1px;
262
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
263
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
264
+ background-clip: padding-box;
265
+ min-width: 100px;
266
+ }
267
+ .kc-dropdown:hover ul{
268
+ display:block;
269
+ }
270
+
271
+
272
+ #kc-totp-secret-key {
273
+ border: 1px solid #eee;
274
+ font-size: 16px;
275
+ padding: 10px;
276
+ margin: 50px 0;
277
+ }