user-storage-ldap.html 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568
  1. <div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
  2. <ol class="breadcrumb">
  3. <li><a href="#/realms/{{realm.realm}}/user-federation">{{:: 'user-federation' | translate}}</a></li>
  4. <li data-ng-hide="create">{{instance.name|capitalize}}</li>
  5. <li data-ng-show="create">{{:: 'add-user-storage-provider' | translate}}</li>
  6. </ol>
  7. <kc-tabs-ldap></kc-tabs-ldap>
  8. <form class="form-horizontal" name="realmForm" novalidate kc-read-only="!access.manageRealm">
  9. <fieldset>
  10. <legend><span class="text">{{:: 'required-settings' | translate}}</span></legend>
  11. <div class="form-group clearfix" data-ng-show="!create">
  12. <label class="col-md-2 control-label" for="providerId">{{:: 'provider-id' | translate}} </label>
  13. <div class="col-md-6">
  14. <input class="form-control" id="providerId" type="text" ng-model="instance.id" readonly>
  15. </div>
  16. </div>
  17. <div class="form-group clearfix block">
  18. <label class="col-md-2 control-label" for="enabled">{{:: 'enabled' | translate}}</label>
  19. <div class="col-md-6">
  20. <input ng-model="instance.config['enabled'][0]" name="enabled" id="enabled" onoffswitchvalue on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  21. </div>
  22. <kc-tooltip>{{:: 'user-storage.enabled.tooltip' | translate}}</kc-tooltip>
  23. </div>
  24. <div class="form-group clearfix">
  25. <label class="col-md-2 control-label" for="consoleDisplayName">{{:: 'console-display-name' | translate}} </label>
  26. <div class="col-md-6">
  27. <input class="form-control" id="consoleDisplayName" type="text" ng-model="instance.name" placeholder="{{:: 'defaults-to-id' | translate}}">
  28. </div>
  29. <kc-tooltip>{{:: 'console-display-name.tooltip' | translate}}</kc-tooltip>
  30. </div>
  31. <div class="form-group clearfix">
  32. <label class="col-md-2 control-label" for="priority">{{:: 'priority' | translate}} </label>
  33. <div class="col-md-6">
  34. <input class="form-control" id="priority" type="text" ng-model="instance.config['priority'][0]">
  35. </div>
  36. <kc-tooltip>{{:: 'priority.tooltip' | translate}}</kc-tooltip>
  37. </div>
  38. <div class="form-group clearfix block">
  39. <label class="col-md-2 control-label" for="importEnabled">{{:: 'import-enabled' | translate}}</label>
  40. <div class="col-md-6">
  41. <input ng-model="instance.config['importEnabled'][0]" name="importEnabled" id="importEnabled" onoffswitchvalue on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  42. </div>
  43. <kc-tooltip>{{:: 'ldap.import-enabled.tooltip' | translate}}</kc-tooltip>
  44. </div>
  45. <div class="form-group">
  46. <label class="col-md-2 control-label" for="editMode"><span class="required">*</span> {{:: 'edit-mode' | translate}}</label>
  47. <div class="col-md-6">
  48. <div>
  49. <select class="form-control" id="editMode"
  50. ng-model="instance.config['editMode'][0]"
  51. required>
  52. <option>READ_ONLY</option>
  53. <option>WRITABLE</option>
  54. <option>UNSYNCED</option>
  55. </select>
  56. </div>
  57. </div>
  58. <kc-tooltip>{{:: 'ldap.edit-mode.tooltip' | translate}}</kc-tooltip>
  59. </div>
  60. <div class="form-group clearfix block">
  61. <label class="col-md-2 control-label" for="syncRegistrations">{{:: 'sync-registrations' | translate}}</label>
  62. <div class="col-md-6">
  63. <input ng-model="instance.config['syncRegistrations'][0]" name="syncRegistrations" id="syncRegistrations" onoffswitchvalue on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  64. </div>
  65. <kc-tooltip>{{:: 'ldap.sync-registrations.tooltip' | translate}}</kc-tooltip>
  66. </div>
  67. <div class="form-group clearfix">
  68. <label class="col-md-2 control-label" for="vendor"><span class="required">*</span> {{:: 'vendor' | translate}}</label>
  69. <div class="col-md-6">
  70. <div data-ng-show="create">
  71. <select class="form-control" id="vendor"
  72. ng-model="instance.config['vendor'][0]"
  73. ng-options="vendor.id as vendor.name for vendor in ldapVendors"
  74. required>
  75. </select>
  76. </div>
  77. <div data-ng-show="!create">
  78. <input class="form-control" id="vendor-ro" type="text" ng-model="vendorName" readonly>
  79. </div>
  80. </div>
  81. <kc-tooltip>{{:: 'ldap.vendor.tooltip' | translate}}</kc-tooltip>
  82. </div>
  83. <div class="form-group clearfix">
  84. <label class="col-md-2 control-label" for="usernameLDAPAttribute"><span class="required">*</span> {{:: 'username-ldap-attribute' | translate}}</label>
  85. <div class="col-md-6">
  86. <input class="form-control" id="usernameLDAPAttribute" type="text" ng-model="instance.config['usernameLDAPAttribute'][0]" placeholder="{{:: 'ldap-attribute-name-for-username' | translate}}" required>
  87. </div>
  88. <kc-tooltip>{{:: 'username-ldap-attribute.tooltip' | translate}}</kc-tooltip>
  89. </div>
  90. <div class="form-group clearfix">
  91. <label class="col-md-2 control-label" for="rdnLDAPAttribute"><span class="required">*</span> {{:: 'rdn-ldap-attribute' | translate}}</label>
  92. <div class="col-md-6">
  93. <input class="form-control" id="rdnLDAPAttribute" type="text" ng-model="instance.config['rdnLDAPAttribute'][0]" placeholder="{{:: 'ldap-attribute-name-for-user-rdn' | translate}}" required>
  94. </div>
  95. <kc-tooltip>{{:: 'rdn-ldap-attribute.tooltip' | translate}}</kc-tooltip>
  96. </div>
  97. <div class="form-group clearfix">
  98. <label class="col-md-2 control-label" for="uuidLDAPAttribute"><span class="required">*</span> {{:: 'uuid-ldap-attribute' | translate}}</label>
  99. <div class="col-md-6">
  100. <input class="form-control" id="uuidLDAPAttribute" type="text" ng-model="instance.config['uuidLDAPAttribute'][0]" placeholder="{{:: 'ldap-attribute-name-for-uuid' | translate}}" required>
  101. </div>
  102. <kc-tooltip>{{:: 'uuid-ldap-attribute.tooltip' | translate}}</kc-tooltip>
  103. </div>
  104. <div class="form-group clearfix">
  105. <label class="col-md-2 control-label" for="userObjectClasses"><span class="required">*</span> {{:: 'user-object-classes' | translate}}</label>
  106. <div class="col-md-6">
  107. <input class="form-control" id="userObjectClasses" type="text" ng-model="instance.config['userObjectClasses'][0]" placeholder="{{:: 'ldap-user-object-classes.placeholder' | translate}}" required>
  108. </div>
  109. <kc-tooltip>{{:: 'ldap.user-object-classes.tooltip' | translate}}</kc-tooltip>
  110. </div>
  111. <div class="form-group clearfix">
  112. <label class="col-md-2 control-label" for="ldapConnectionUrl"><span class="required">*</span> {{:: 'connection-url' | translate}}</label>
  113. <div class="col-md-6">
  114. <input class="form-control" id="ldapConnectionUrl" type="text" ng-model="instance.config['connectionUrl'][0]" placeholder="{{:: 'ldap-connection-url' | translate}}" required>
  115. </div>
  116. <kc-tooltip>{{:: 'ldap.connection-url.tooltip' | translate}}</kc-tooltip>
  117. <div class="col-sm-4" data-ng-show="access.manageRealm">
  118. <a class="btn btn-primary" data-ng-click="testConnection()">{{:: 'test-connection' | translate}}</a>
  119. </div>
  120. </div>
  121. <div class="form-group clearfix">
  122. <label class="col-md-2 control-label" for="ldapUsersDn"><span class="required">*</span> {{:: 'users-dn' | translate}}</label>
  123. <div class="col-md-6">
  124. <input class="form-control" id="ldapUsersDn" type="text" ng-model="instance.config['usersDn'][0]" placeholder="{{:: 'ldap-users-dn' | translate}}" required>
  125. </div>
  126. <kc-tooltip>{{:: 'ldap.users-dn.tooltip' | translate}}</kc-tooltip>
  127. </div>
  128. <div class="form-group clearfix">
  129. <label class="col-md-2 control-label" for="customUserSearchFilter">{{:: 'custom-user-ldap-filter' | translate}}</label>
  130. <div class="col-md-6">
  131. <input class="form-control" id="customUserSearchFilter" type="text" ng-model="instance.config['customUserSearchFilter'][0]" placeholder="{{:: 'ldap-filter' | translate}}">
  132. </div>
  133. <kc-tooltip>{{:: 'ldap.custom-user-ldap-filter.tooltip' | translate}}</kc-tooltip>
  134. </div>
  135. <div class="form-group">
  136. <label class="col-md-2 control-label" for="searchScope">{{:: 'search-scope' | translate}}</label>
  137. <div class="col-md-6">
  138. <div>
  139. <select class="form-control" id="searchScope"
  140. ng-model="instance.config['searchScope'][0]"
  141. ng-options="searchScope.id as searchScope.name for searchScope in searchScopes"
  142. required>
  143. </select>
  144. </div>
  145. </div>
  146. <kc-tooltip>{{:: 'ldap.search-scope.tooltip' | translate}}</kc-tooltip>
  147. </div>
  148. <div class="form-group clearfix">
  149. <label class="col-md-2 control-label" for="authType"><span class="required">*</span> {{:: 'authentication-type' | translate}}</label>
  150. <div class="col-md-6">
  151. <div>
  152. <select class="form-control" id="authType"
  153. ng-model="instance.config['authType'][0]"
  154. ng-options="authType.id as authType.name for authType in authTypes"
  155. required>
  156. </select>
  157. </div>
  158. </div>
  159. <kc-tooltip>{{:: 'ldap.authentication-type.tooltip' | translate}}</kc-tooltip>
  160. </div>
  161. <div class="form-group clearfix" data-ng-hide="instance.config['authType'][0] == 'none'">
  162. <label class="col-md-2 control-label" for="ldapBindDn"><span class="required">*</span> {{:: 'bind-dn' | translate}}</label>
  163. <div class="col-md-6">
  164. <input class="form-control" id="ldapBindDn" type="text" ng-model="instance.config['bindDn'][0]" placeholder="{{:: 'ldap-bind-dn' | translate}}" data-ng-required="instance.config['authType'][0] != 'none'">
  165. </div>
  166. <kc-tooltip>{{:: 'ldap.bind-dn.tooltip' | translate}}</kc-tooltip>
  167. </div>
  168. <div class="form-group clearfix" data-ng-hide="instance.config['authType'][0] == 'none'">
  169. <label class="col-md-2 control-label" for="ldapBindCred"><span class="required">*</span> {{:: 'bind-credential' | translate}}</label>
  170. <div class="col-md-6">
  171. <input class="form-control" id="ldapBindCred" kc-password ng-model="instance.config['bindCredential'][0]" placeholder="{{:: 'ldap-bind-credentials' | translate}}" data-ng-required="instance.config['authType'][0] != 'none'">
  172. </div>
  173. <kc-tooltip>{{:: 'ldap.bind-credential.tooltip' | translate}}</kc-tooltip>
  174. <div class="col-sm-4" data-ng-show="access.manageRealm">
  175. <a class="btn btn-primary" data-ng-click="testAuthentication()">{{:: 'test-authentication' | translate}}</a>
  176. </div>
  177. </div>
  178. </fieldset>
  179. <fieldset>
  180. <legend id="advancedLdapSettingsHeader" collapsed><span class="text">{{:: 'advanced-ldap-settings' | translate}}</span></legend>
  181. <div class="form-group clearfix">
  182. <label class="col-md-2 control-label" for="startTls">{{:: 'enable-start-tls' | translate}}</label>
  183. <div class="col-md-6">
  184. <input ng-model="instance.config['startTls'][0]" name="startTls" id="startTls" onoffswitchvalue on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  185. </div>
  186. <kc-tooltip>{{:: 'ldap.startTls.tooltip' | translate}}</kc-tooltip>
  187. </div>
  188. <div class="form-group clearfix">
  189. <label class="col-md-2 control-label" for="usePasswordModifyExtendedOp">{{:: 'enable-usePasswordModifyExtendedOp' | translate}}</label>
  190. <div class="col-md-6">
  191. <input ng-model="instance.config['usePasswordModifyExtendedOp'][0]" name="usePasswordModifyExtendedOp" id="usePasswordModifyExtendedOp" onoffswitchvalue on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  192. </div>
  193. <kc-tooltip>{{:: 'ldap.usePasswordModifyExtendedOp.tooltip' | translate}}</kc-tooltip>
  194. <div>
  195. <div class="col-sm-4" data-ng-show="access.manageRealm">
  196. <a class="btn btn-primary" data-ng-click="queryAndSetLdapSupportedExtensions()">{{:: 'ldap-query-supported-extensions' | translate}}</a>
  197. </div>
  198. <kc-tooltip>{{:: 'ldap-query-supported-extensions.tooltip' | translate}}</kc-tooltip>
  199. </div>
  200. </div>
  201. <div class="form-group clearfix">
  202. <label class="col-md-2 control-label" for="validatePasswordPolicy">{{:: 'validate-password-policy' | translate}}</label>
  203. <div class="col-md-6">
  204. <input ng-model="instance.config['validatePasswordPolicy'][0]" name="validatePasswordPolicy" id="validatePasswordPolicy" onoffswitchvalue on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  205. </div>
  206. <kc-tooltip>{{:: 'ldap.validate-password-policy.tooltip' | translate}}</kc-tooltip>
  207. </div>
  208. <div class="form-group clearfix">
  209. <label class="col-md-2 control-label" for="trustEmail">{{:: 'trust-email' | translate}}</label>
  210. <div class="col-md-6">
  211. <input ng-model="instance.config['trustEmail'][0]" name="trustEmail" id="trustEmail" onoffswitchvalue on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  212. </div>
  213. <kc-tooltip>{{:: 'trust-email.tooltip' | translate}}</kc-tooltip>
  214. </div>
  215. <div class="form-group">
  216. <label class="col-md-2 control-label" for="useTruststoreSpi">{{:: 'use-truststore-spi' | translate}}</label>
  217. <div class="col-md-6">
  218. <div>
  219. <select class="form-control" id="useTruststoreSpi"
  220. ng-model="instance.config['useTruststoreSpi'][0]"
  221. ng-options="useTruststoreSpi.id as useTruststoreSpi.name for useTruststoreSpi in useTruststoreOptions"
  222. required>
  223. </select>
  224. </div>
  225. </div>
  226. <kc-tooltip>{{:: 'ldap.use-truststore-spi.tooltip' | translate}}</kc-tooltip>
  227. </div>
  228. <div class="form-group clearfix">
  229. <label class="col-md-2 control-label" for="connectionTimeout">{{:: 'ldap-connection-timeout' | translate}}</label>
  230. <div class="col-md-6">
  231. <input class="form-control" id="connectionTimeout" type="text" ng-model="instance.config['connectionTimeout'][0]" placeholder="{{:: 'ldap-connection-timeout' | translate}}">
  232. </div>
  233. <kc-tooltip>{{:: 'ldap.connection-timeout.tooltip' | translate}}</kc-tooltip>
  234. </div>
  235. <div class="form-group clearfix">
  236. <label class="col-md-2 control-label" for="readTimeout">{{:: 'ldap-read-timeout' | translate}}</label>
  237. <div class="col-md-6">
  238. <input class="form-control" id="readTimeout" type="text" ng-model="instance.config['readTimeout'][0]" placeholder="{{:: 'ldap-read-timeout' | translate}}">
  239. </div>
  240. <kc-tooltip>{{:: 'ldap.read-timeout.tooltip' | translate}}</kc-tooltip>
  241. </div>
  242. <div class="form-group clearfix">
  243. <label class="col-md-2 control-label" for="pagination">{{:: 'pagination' | translate}}</label>
  244. <div class="col-md-6">
  245. <input ng-model="instance.config['pagination'][0]" name="pagination" id="pagination" onoffswitchvalue on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  246. </div>
  247. <kc-tooltip>{{:: 'ldap.pagination.tooltip' | translate}}</kc-tooltip>
  248. </div>
  249. </fieldset>
  250. <fieldset>
  251. <legend id="connectionPoolSettingsHeader" collapsed><span class="text">{{:: 'connection-pooling' | translate}}</span></legend>
  252. <div class="form-group clearfix">
  253. <label class="col-md-2 control-label" for="connectionPooling">{{:: 'connection-pooling' | translate}}</label>
  254. <div class="col-md-6">
  255. <input ng-model="instance.config['connectionPooling'][0]" name="connectionPooling" id="connectionPooling" onoffswitchvalue on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  256. </div>
  257. <kc-tooltip>{{:: 'ldap.connection-pooling.tooltip' | translate}}</kc-tooltip>
  258. </div>
  259. <div class="form-group clearfix" data-ng-show="instance.config['connectionPooling'][0] == 'true'">
  260. <label class="col-md-2 control-label" for="connectionPoolingAuthentication">{{:: 'connection-pooling-authentication' | translate}}</label>
  261. <div class="col-md-6">
  262. <input class="form-control" id="connectionPoolingAuthentication" type="text" ng-model="instance.config['connectionPoolingAuthentication'][0]" placeholder="{{:: 'connection-pooling-authentication-default' | translate}}"/>
  263. </div>
  264. <kc-tooltip>{{:: 'ldap.connection-pooling.authentication.tooltip' | translate}}</kc-tooltip>
  265. </div>
  266. <div class="form-group clearfix" data-ng-show="instance.config['connectionPooling'][0] == 'true'">
  267. <label class="col-md-2 control-label" for="connectionPoolingDebug">{{:: 'connection-pooling-debug' | translate}}</label>
  268. <div class="col-md-6">
  269. <input class="form-control" id="connectionPoolingDebug" type="text" ng-model="instance.config['connectionPoolingDebug'][0]" placeholder="{{:: 'connection-pooling-debug-default' | translate}}"/>
  270. </div>
  271. <kc-tooltip>{{:: 'ldap.connection-pooling.debug.tooltip' | translate}}</kc-tooltip>
  272. </div>
  273. <div class="form-group clearfix" data-ng-show="instance.config['connectionPooling'][0] == 'true'">
  274. <label class="col-md-2 control-label" for="connectionPoolingInitSize">{{:: 'connection-pooling-initsize' | translate}}</label>
  275. <div class="col-md-6">
  276. <input class="form-control" id="connectionPoolingInitSize" type="text" ng-model="instance.config['connectionPoolingInitSize'][0]" placeholder="{{:: 'connection-pooling-initsize-default' | translate}}"/>
  277. </div>
  278. <kc-tooltip>{{:: 'ldap.connection-pooling.initsize.tooltip' | translate}}</kc-tooltip>
  279. </div>
  280. <div class="form-group clearfix" data-ng-show="instance.config['connectionPooling'][0] == 'true'">
  281. <label class="col-md-2 control-label" for="connectionPoolingMaxSize">{{:: 'connection-pooling-maxsize' | translate}}</label>
  282. <div class="col-md-6">
  283. <input class="form-control" id="connectionPoolingMaxSize" type="text" ng-model="instance.config['connectionPoolingMaxSize'][0]" placeholder="{{:: 'connection-pooling-maxsize-default' | translate}}"/>
  284. </div>
  285. <kc-tooltip>{{:: 'ldap.connection-pooling.maxsize.tooltip' | translate}}</kc-tooltip>
  286. </div>
  287. <div class="form-group clearfix" data-ng-show="instance.config['connectionPooling'][0] == 'true'">
  288. <label class="col-md-2 control-label" for="connectionPoolingPrefSize">{{:: 'connection-pooling-prefsize' | translate}}</label>
  289. <div class="col-md-6">
  290. <input class="form-control" id="connectionPoolingPrefSize" type="text" ng-model="instance.config['connectionPoolingPrefSize'][0]" placeholder="{{:: 'connection-pooling-prefsize-default' | translate}}"/>
  291. </div>
  292. <kc-tooltip>{{:: 'ldap.connection-pooling.prefsize.tooltip' | translate}}</kc-tooltip>
  293. </div>
  294. <div class="form-group clearfix" data-ng-show="instance.config['connectionPooling'][0] == 'true'">
  295. <label class="col-md-2 control-label" for="connectionPoolingProtocol">{{:: 'connection-pooling-protocol' | translate}}</label>
  296. <div class="col-md-6">
  297. <input class="form-control" id="connectionPoolingProtocol" type="text" ng-model="instance.config['connectionPoolingProtocol'][0]" placeholder="{{:: 'connection-pooling-protocol-default' | translate}}"/>
  298. </div>
  299. <kc-tooltip>{{:: 'ldap.connection-pooling.protocol.tooltip' | translate}}</kc-tooltip>
  300. </div>
  301. <div class="form-group clearfix" data-ng-show="instance.config['connectionPooling'][0] == 'true'">
  302. <label class="col-md-2 control-label" for="connectionPoolingTimeout">{{:: 'connection-pooling-timeout' | translate}}</label>
  303. <div class="col-md-6">
  304. <input class="form-control" id="connectionPoolingTimeout" type="text" ng-model="instance.config['connectionPoolingTimeout'][0]" placeholder="{{:: 'connection-pooling-timeout-default' | translate}}"/>
  305. </div>
  306. <kc-tooltip>{{:: 'ldap.connection-pooling.timeout.tooltip' | translate}}</kc-tooltip>
  307. </div>
  308. </fieldset>
  309. <fieldset>
  310. <legend id="kerberosIntegrationHeader" collapsed><span class="text">{{:: 'kerberos-integration' | translate}}</span></legend>
  311. <div class="form-group">
  312. <label class="col-md-2 control-label" for="allowKerberosAuthentication">{{:: 'allow-kerberos-authentication' | translate}} </label>
  313. <div class="col-md-6">
  314. <input ng-model="instance.config['allowKerberosAuthentication'][0]" name="allowKerberosAuthentication" id="allowKerberosAuthentication" onoffswitchvalue on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  315. </div>
  316. <kc-tooltip>{{:: 'ldap.allow-kerberos-authentication.tooltip' | translate}}</kc-tooltip>
  317. </div>
  318. <div class="form-group clearfix" data-ng-show="instance.config['allowKerberosAuthentication'][0] == 'true'">
  319. <label class="col-md-2 control-label" for="kerberosRealm"><span class="required">*</span> {{:: 'kerberos-realm' | translate}}</label>
  320. <div class="col-md-6">
  321. <input class="form-control" id="kerberosRealm" type="text" ng-model="instance.config['kerberosRealm'][0]" ng-required="instance.config['allowKerberosAuthentication'][0] == 'true'">
  322. </div>
  323. <kc-tooltip>{{:: 'kerberos-realm.tooltip' | translate}}</kc-tooltip>
  324. </div>
  325. <div class="form-group clearfix" data-ng-show="instance.config['allowKerberosAuthentication'][0] == 'true'">
  326. <label class="col-md-2 control-label" for="serverPrincipal"><span class="required">*</span> {{:: 'server-principal' | translate}}</label>
  327. <div class="col-md-6">
  328. <input class="form-control" id="serverPrincipal" type="text" ng-model="instance.config['serverPrincipal'][0]" ng-required="instance.config['allowKerberosAuthentication'][0] == 'true'">
  329. </div>
  330. <kc-tooltip>{{:: 'server-principal.tooltip' | translate}}</kc-tooltip>
  331. </div>
  332. <div class="form-group clearfix" data-ng-show="instance.config['allowKerberosAuthentication'][0] == 'true'">
  333. <label class="col-md-2 control-label" for="keyTab"><span class="required">*</span> {{:: 'keytab' | translate}}</label>
  334. <div class="col-md-6">
  335. <input class="form-control" id="keyTab" type="text" ng-model="instance.config['keyTab'][0]" ng-required="instance.config['allowKerberosAuthentication'][0] == 'true'">
  336. </div>
  337. <kc-tooltip>{{:: 'keytab.tooltip' | translate}}</kc-tooltip>
  338. </div>
  339. <div class="form-group" data-ng-show="instance.config['allowKerberosAuthentication'][0] == 'true'">
  340. <label class="col-md-2 control-label" for="debug">{{:: 'debug' | translate}} </label>
  341. <div class="col-md-6">
  342. <input ng-model="instance.config['debug'][0]" name="debug" id="debug" onoffswitchvalue on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  343. </div>
  344. <kc-tooltip>{{:: 'debug.tooltip' | translate}}</kc-tooltip>
  345. </div>
  346. <div class="form-group" data-ng-show="instance.config['allowKerberosAuthentication'][0]">
  347. <label class="col-md-2 control-label" for="useKerberosForPasswordAuthentication">{{:: 'use-kerberos-for-password-authentication' | translate}} </label>
  348. <div class="col-md-6">
  349. <input ng-model="instance.config['useKerberosForPasswordAuthentication'][0]" id="useKerberosForPasswordAuthentication" onoffswitchvalue on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  350. </div>
  351. <kc-tooltip>{{:: 'ldap.use-kerberos-for-password-authentication.tooltip' | translate}}</kc-tooltip>
  352. </div>
  353. </fieldset>
  354. <fieldset>
  355. <legend id="syncSettingsHeader" collapsed><span class="text">{{:: 'sync-settings' | translate}}</span></legend>
  356. <div class="form-group clearfix">
  357. <label class="col-md-2 control-label" for="batchSizeForSync">{{:: 'batch-size' | translate}}</label>
  358. <div class="col-md-6">
  359. <input class="form-control" type="text" ng-model="instance.config['batchSizeForSync'][0]" id="batchSizeForSync" />
  360. </div>
  361. <kc-tooltip>{{:: 'ldap.batch-size.tooltip' | translate}}</kc-tooltip>
  362. </div>
  363. <div class="form-group clearfix">
  364. <label class="col-md-2 control-label" for="fullSyncEnabled">{{:: 'periodic-full-sync' | translate}}</label>
  365. <div class="col-md-6">
  366. <input ng-model="fullSyncEnabled" name="fullSyncEnabled" id="fullSyncEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  367. </div>
  368. <kc-tooltip>{{:: 'ldap.periodic-full-sync.tooltip' | translate}}</kc-tooltip>
  369. </div>
  370. <div class="form-group clearfix" data-ng-show="fullSyncEnabled">
  371. <label class="col-md-2 control-label" for="fullSyncPeriod">{{:: 'full-sync-period' | translate}}</label>
  372. <div class="col-md-6">
  373. <input class="form-control" type="text" ng-model="instance.config['fullSyncPeriod'][0]" id="fullSyncPeriod" />
  374. </div>
  375. <kc-tooltip>{{:: 'full-sync-period.tooltip' | translate}}</kc-tooltip>
  376. </div>
  377. <div class="form-group clearfix">
  378. <label class="col-md-2 control-label" for="changedSyncEnabled">{{:: 'periodic-changed-users-sync' | translate}}</label>
  379. <div class="col-md-6">
  380. <input ng-model="changedSyncEnabled" name="changedSyncEnabled" id="changedSyncEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
  381. </div>
  382. <kc-tooltip>{{:: 'ldap.periodic-changed-users-sync.tooltip' | translate}}</kc-tooltip>
  383. </div>
  384. <div class="form-group clearfix" data-ng-show="changedSyncEnabled">
  385. <label class="col-md-2 control-label" for="changedSyncPeriod">{{:: 'changed-users-sync-period' | translate}}</label>
  386. <div class="col-md-6">
  387. <input class="form-control" type="text" ng-model="instance.config['changedSyncPeriod'][0]" id="changedSyncPeriod" />
  388. </div>
  389. <kc-tooltip>{{:: 'ldap.changed-users-sync-period.tooltip' | translate}}</kc-tooltip>
  390. </div>
  391. </fieldset>
  392. <fieldset>
  393. <legend id="cachePolicyHeader" collapsed><span class="text">{{:: 'user-storage-cache-policy' | translate}}</span></legend>
  394. <div class="form-group">
  395. <label for="cachePolicy" class="col-md-2 control-label">{{:: 'userStorage.cachePolicy' | translate}}</label>
  396. <div class="col-md-2">
  397. <div>
  398. <select id="cachePolicy" ng-model="instance.config['cachePolicy'][0]" class="form-control">
  399. <option value="DEFAULT">{{:: 'userStorage.cachePolicy.option.DEFAULT' | translate}}</option>
  400. <option value="EVICT_DAILY">{{:: 'userStorage.cachePolicy.option.EVICT_DAILY' | translate}}</option>
  401. <option value="EVICT_WEEKLY">{{:: 'userStorage.cachePolicy.option.EVICT_WEEKLY' | translate}}</option>
  402. <option value="MAX_LIFESPAN">{{:: 'userStorage.cachePolicy.option.MAX_LIFESPAN' | translate}}</option>
  403. <option value="NO_CACHE">{{:: 'userStorage.cachePolicy.option.NO_CACHE' | translate}}</option>
  404. </select>
  405. </div>
  406. </div>
  407. <kc-tooltip>{{:: 'userStorage.cachePolicy.tooltip' | translate}}</kc-tooltip>
  408. </div>
  409. <div class="form-group" data-ng-show="instance.config['cachePolicy'][0] == 'EVICT_WEEKLY'">
  410. <label for="evictionDay" class="col-md-2 control-label">{{:: 'userStorage.cachePolicy.evictionDay' | translate}}</label>
  411. <div class="col-md-2">
  412. <div>
  413. <select id="evictionDay" ng-model="instance.config['evictionDay'][0]" class="form-control">
  414. <option value="1">{{:: 'Sunday' | translate}}</option>
  415. <option value="2">{{:: 'Monday' | translate}}</option>
  416. <option value="3">{{:: 'Tuesday' | translate}}</option>
  417. <option value="4">{{:: 'Wednesday' | translate}}</option>
  418. <option value="5">{{:: 'Thursday' | translate}}</option>
  419. <option value="6">{{:: 'Friday' | translate}}</option>
  420. <option value="7">{{:: 'Saturday' | translate}}</option>
  421. </select>
  422. </div>
  423. </div>
  424. <kc-tooltip>{{:: 'userStorage.cachePolicy.evictionDay.tooltip' | translate}}</kc-tooltip>
  425. </div>
  426. <div class="form-group clearfix" data-ng-show="instance.config['cachePolicy'][0] == 'EVICT_WEEKLY' || instance.config['cachePolicy'][0] == 'EVICT_DAILY'">
  427. <label class="col-md-2 control-label" for="evictionHour">{{:: 'userStorage.cachePolicy.evictionHour' | translate}}</label>
  428. <div class="col-md-2">
  429. <div>
  430. <select id="evictionHour" ng-model="instance.config['evictionHour'][0]" class="form-control">
  431. <option value="0">00</option>
  432. <option value="1">01</option>
  433. <option value="2">02</option>
  434. <option value="3">03</option>
  435. <option value="4">04</option>
  436. <option value="5">05</option>
  437. <option value="6">06</option>
  438. <option value="7">07</option>
  439. <option value="8">08</option>
  440. <option value="9">09</option>
  441. <option value="10">10</option>
  442. <option value="11">11</option>
  443. <option value="12">12</option>
  444. <option value="13">13</option>
  445. <option value="14">14</option>
  446. <option value="15">15</option>
  447. <option value="16">16</option>
  448. <option value="17">17</option>
  449. <option value="18">18</option>
  450. <option value="19">19</option>
  451. <option value="20">20</option>
  452. <option value="21">21</option>
  453. <option value="22">22</option>
  454. <option value="23">23</option>
  455. </select>
  456. </div>
  457. </div>
  458. <kc-tooltip>{{:: 'userStorage.cachePolicy.evictionHour.tooltip' | translate}}</kc-tooltip>
  459. </div>
  460. <div class="form-group clearfix" data-ng-show="instance.config['cachePolicy'][0] == 'EVICT_WEEKLY' || instance.config['cachePolicy'][0] == 'EVICT_DAILY'">
  461. <label class="col-md-2 control-label" for="evictionMinute">{{:: 'userStorage.cachePolicy.evictionMinute' | translate}}</label>
  462. <div class="col-md-2">
  463. <div>
  464. <select id="evictionMinute" ng-model="instance.config['evictionMinute'][0]" class="form-control">
  465. <option value="0">00</option>
  466. <option value="1">01</option>
  467. <option value="2">02</option>
  468. <option value="3">03</option>
  469. <option value="4">04</option>
  470. <option value="5">05</option>
  471. <option value="6">06</option>
  472. <option value="7">07</option>
  473. <option value="8">08</option>
  474. <option value="9">09</option>
  475. <option value="10">10</option>
  476. <option value="11">11</option>
  477. <option value="12">12</option>
  478. <option value="13">13</option>
  479. <option value="14">14</option>
  480. <option value="15">15</option>
  481. <option value="16">16</option>
  482. <option value="17">17</option>
  483. <option value="18">18</option>
  484. <option value="19">19</option>
  485. <option value="20">20</option>
  486. <option value="21">21</option>
  487. <option value="22">22</option>
  488. <option value="23">23</option>
  489. <option value="24">24</option>
  490. <option value="25">25</option>
  491. <option value="26">26</option>
  492. <option value="27">27</option>
  493. <option value="28">28</option>
  494. <option value="29">29</option>
  495. <option value="30">30</option>
  496. <option value="31">31</option>
  497. <option value="32">32</option>
  498. <option value="33">33</option>
  499. <option value="34">34</option>
  500. <option value="35">35</option>
  501. <option value="36">36</option>
  502. <option value="37">37</option>
  503. <option value="38">38</option>
  504. <option value="39">39</option>
  505. <option value="40">40</option>
  506. <option value="41">41</option>
  507. <option value="42">42</option>
  508. <option value="43">43</option>
  509. <option value="44">44</option>
  510. <option value="45">45</option>
  511. <option value="46">46</option>
  512. <option value="47">47</option>
  513. <option value="48">48</option>
  514. <option value="49">49</option>
  515. <option value="50">50</option>
  516. <option value="51">51</option>
  517. <option value="52">52</option>
  518. <option value="53">53</option>
  519. <option value="54">54</option>
  520. <option value="55">55</option>
  521. <option value="56">56</option>
  522. <option value="57">57</option>
  523. <option value="58">58</option>
  524. <option value="59">59</option>
  525. </select>
  526. </div>
  527. </div>
  528. <kc-tooltip>{{:: 'userStorage.cachePolicy.evictionMinute.tooltip' | translate}}</kc-tooltip>
  529. </div>
  530. <div class="form-group clearfix" data-ng-show="instance.config['cachePolicy'][0] == 'MAX_LIFESPAN'">
  531. <label class="col-md-2 control-label" for="maxLifespan">{{:: 'userStorage.cachePolicy.maxLifespan' | translate}}</label>
  532. <div class="col-md-6">
  533. <input class="form-control" type="text" ng-model="instance.config['maxLifespan'][0]" id="maxLifespan" />
  534. </div>
  535. <kc-tooltip>{{:: 'userStorage.cachePolicy.maxLifespan.tooltip' | translate}}</kc-tooltip>
  536. </div>
  537. </fieldset>
  538. <div class="form-group">
  539. <div class="col-md-10 col-md-offset-2" data-ng-show="create && access.manageRealm">
  540. <button kc-save>{{:: 'save' | translate}}</button>
  541. <button kc-cancel data-ng-click="cancel()">{{:: 'cancel' | translate}}</button>
  542. </div>
  543. </div>
  544. <div class="form-group">
  545. <div class="col-md-10 col-md-offset-2" data-ng-show="!create && access.manageRealm">
  546. <button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
  547. <button kc-reset data-ng-disabled="!changed">{{:: 'cancel' | translate}}</button>
  548. <button class="btn btn-primary" data-ng-click="triggerChangedUsersSync()" data-ng-hide="changed">{{:: 'synchronize-changed-users' | translate}}</button>
  549. <button class="btn btn-primary" data-ng-click="triggerFullSync()" data-ng-hide="changed">{{:: 'synchronize-all-users' | translate}}</button>
  550. <button class="btn btn-primary" data-ng-click="removeImportedUsers()" data-ng-hide="changed">{{:: 'remove-imported-users' | translate}}</button>
  551. <button class="btn btn-primary" data-ng-click="unlinkUsers()" data-ng-hide="changed">{{:: 'unlink-users' | translate}}</button>
  552. </div>
  553. </div>
  554. </form>
  555. </div>
  556. <kc-menu></kc-menu>