PwmSetting.java 92 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734
  1. /*
  2. * Password Management Servlets (PWM)
  3. * http://www.pwm-project.org
  4. *
  5. * Copyright (c) 2006-2009 Novell, Inc.
  6. * Copyright (c) 2009-2020 The PWM Project
  7. *
  8. * Licensed under the Apache License, Version 2.0 (the "License");
  9. * you may not use this file except in compliance with the License.
  10. * You may obtain a copy of the License at
  11. *
  12. * http://www.apache.org/licenses/LICENSE-2.0
  13. *
  14. * Unless required by applicable law or agreed to in writing, software
  15. * distributed under the License is distributed on an "AS IS" BASIS,
  16. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17. * See the License for the specific language governing permissions and
  18. * limitations under the License.
  19. */
  20. package password.pwm.config;
  21. import lombok.Value;
  22. import password.pwm.config.value.PasswordValue;
  23. import password.pwm.config.value.StoredValue;
  24. import password.pwm.config.value.ValueFactory;
  25. import password.pwm.i18n.Config;
  26. import password.pwm.util.i18n.LocaleHelper;
  27. import password.pwm.util.java.JavaHelper;
  28. import password.pwm.util.java.LazySupplier;
  29. import password.pwm.util.java.StringUtil;
  30. import password.pwm.util.java.XmlElement;
  31. import password.pwm.util.logging.PwmLogger;
  32. import password.pwm.util.macro.MacroMachine;
  33. import java.util.ArrayList;
  34. import java.util.Arrays;
  35. import java.util.Collection;
  36. import java.util.Collections;
  37. import java.util.EnumMap;
  38. import java.util.EnumSet;
  39. import java.util.LinkedHashMap;
  40. import java.util.LinkedHashSet;
  41. import java.util.List;
  42. import java.util.Locale;
  43. import java.util.Map;
  44. import java.util.Optional;
  45. import java.util.Set;
  46. import java.util.TreeMap;
  47. import java.util.function.Supplier;
  48. import java.util.regex.Pattern;
  49. import java.util.regex.PatternSyntaxException;
  50. /**
  51. * PwmConfiguration settings.
  52. *
  53. * @author Jason D. Rivard
  54. */
  55. public enum PwmSetting
  56. {
  57. // templates
  58. TEMPLATE_LDAP(
  59. "template.ldap", PwmSettingSyntax.SELECT, PwmSettingCategory.TEMPLATES ),
  60. TEMPLATE_STORAGE(
  61. "template.storage", PwmSettingSyntax.SELECT, PwmSettingCategory.TEMPLATES ),
  62. // notes
  63. NOTES(
  64. "notes.noteText", PwmSettingSyntax.TEXT_AREA, PwmSettingCategory.NOTES ),
  65. // application settings
  66. PWM_SITE_URL(
  67. "pwm.selfURL", PwmSettingSyntax.STRING, PwmSettingCategory.GENERAL ),
  68. PUBLISH_STATS_ENABLE(
  69. "pwm.publishStats.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.TELEMETRY ),
  70. PUBLISH_STATS_SITE_DESCRIPTION(
  71. "pwm.publishStats.siteDescription", PwmSettingSyntax.STRING, PwmSettingCategory.TELEMETRY ),
  72. URL_FORWARD(
  73. "pwm.forwardURL", PwmSettingSyntax.STRING, PwmSettingCategory.GENERAL ),
  74. URL_LOGOUT(
  75. "pwm.logoutURL", PwmSettingSyntax.STRING, PwmSettingCategory.GENERAL ),
  76. URL_HOME(
  77. "pwm.homeURL", PwmSettingSyntax.STRING, PwmSettingCategory.GENERAL ),
  78. URL_INTRO(
  79. "pwm.introURL", PwmSettingSyntax.SELECT, PwmSettingCategory.GENERAL ),
  80. IDLE_TIMEOUT_SECONDS(
  81. "idleTimeoutSeconds", PwmSettingSyntax.DURATION, PwmSettingCategory.GENERAL ),
  82. HIDE_CONFIGURATION_HEALTH_WARNINGS(
  83. "display.hideConfigHealthWarnings", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.GENERAL ),
  84. KNOWN_LOCALES(
  85. "knownLocales", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.LOCALIZATION ),
  86. LOCALE_COOKIE_MAX_AGE(
  87. "locale.cookie.age", PwmSettingSyntax.DURATION, PwmSettingCategory.LOCALIZATION ),
  88. HTTP_PROXY_URL(
  89. "http.proxy.url", PwmSettingSyntax.STRING, PwmSettingCategory.GENERAL ),
  90. HTTP_PROXY_EXCEPTIONS(
  91. "http.proxy.exceptions", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.GENERAL ),
  92. APP_PROPERTY_OVERRIDES(
  93. "pwm.appProperty.overrides", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.GENERAL ),
  94. // clustering
  95. CLUSTER_ENABLED(
  96. "nodeService.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.CLUSTERING ),
  97. CLUSTER_STORAGE_MODE(
  98. "nodeService.storageMode", PwmSettingSyntax.SELECT, PwmSettingCategory.CLUSTERING ),
  99. SECURITY_LOGIN_SESSION_MODE(
  100. "security.loginSession.mode", PwmSettingSyntax.SELECT, PwmSettingCategory.CLUSTERING ),
  101. SECURITY_MODULE_SESSION_MODE(
  102. "security.moduleSession.mode", PwmSettingSyntax.SELECT, PwmSettingCategory.CLUSTERING ),
  103. // user interface
  104. INTERFACE_THEME(
  105. "interface.theme", PwmSettingSyntax.SELECT, PwmSettingCategory.UI_WEB ),
  106. DISPLAY_SHOW_HIDE_PASSWORD_FIELDS(
  107. "display.showHidePasswordFields", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES ),
  108. DISPLAY_MASK_PASSWORD_FIELDS(
  109. "display.maskPasswordFields", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES ),
  110. DISPLAY_MASK_RESPONSE_FIELDS(
  111. "display.maskResponseFields", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES ),
  112. DISPLAY_MASK_TOKEN_FIELDS(
  113. "display.maskTokenFields", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES ),
  114. DISPLAY_CANCEL_BUTTON(
  115. "display.showCancelButton", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES ),
  116. DISPLAY_TOKEN_SUCCESS_BUTTON(
  117. "display.tokenSuccessPage", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES ),
  118. DISPLAY_SUCCESS_PAGES(
  119. "display.showSuccessPage", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES ),
  120. DISPLAY_LOGIN_PAGE_OPTIONS(
  121. "display.showLoginPageOptions", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES ),
  122. DISPLAY_LOGOUT_BUTTON(
  123. "display.logoutButton", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES ),
  124. DISPLAY_HOME_BUTTON(
  125. "display.homeButton", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES ),
  126. DISPLAY_IDLE_TIMEOUT(
  127. "display.idleTimeout", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES ),
  128. PASSWORD_SHOW_STRENGTH_METER(
  129. "password.showStrengthMeter", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES ),
  130. DISPLAY_CSS_CUSTOM_STYLE(
  131. "display.css.customStyleLocation", PwmSettingSyntax.STRING, PwmSettingCategory.UI_WEB ),
  132. DISPLAY_CSS_CUSTOM_MOBILE_STYLE(
  133. "display.css.customMobileStyleLocation", PwmSettingSyntax.STRING, PwmSettingCategory.UI_WEB ),
  134. DISPLAY_CSS_EMBED(
  135. "display.css.customStyle", PwmSettingSyntax.TEXT_AREA, PwmSettingCategory.UI_WEB ),
  136. DISPLAY_CSS_MOBILE_EMBED(
  137. "display.css.customMobileStyle", PwmSettingSyntax.TEXT_AREA, PwmSettingCategory.UI_WEB ),
  138. DISPLAY_CUSTOM_JAVASCRIPT(
  139. "display.js.custom", PwmSettingSyntax.TEXT_AREA, PwmSettingCategory.UI_WEB ),
  140. DISPLAY_CUSTOM_RESOURCE_BUNDLE(
  141. "display.custom.resourceBundle", PwmSettingSyntax.FILE, PwmSettingCategory.UI_WEB ),
  142. // change password
  143. CHANGE_PASSWORD_PROFILE_LIST(
  144. "changePassword.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  145. CHANGE_PASSWORD_ENABLE(
  146. "changePassword.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.CHANGE_PASSWORD_SETTINGS ),
  147. QUERY_MATCH_CHANGE_PASSWORD(
  148. "password.allowChange.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  149. LOGOUT_AFTER_PASSWORD_CHANGE(
  150. "logoutAfterPasswordChange", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  151. PASSWORD_REQUIRE_FORM(
  152. "password.require.form", PwmSettingSyntax.FORM, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  153. PASSWORD_REQUIRE_CURRENT(
  154. "password.change.requireCurrent", PwmSettingSyntax.SELECT, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  155. PASSWORD_CHANGE_AGREEMENT_MESSAGE(
  156. "display.password.changeAgreement", PwmSettingSyntax.LOCALIZED_TEXT_AREA, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  157. PASSWORD_COMPLETE_MESSAGE(
  158. "display.password.completeMessage", PwmSettingSyntax.LOCALIZED_TEXT_AREA, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  159. DISPLAY_PASSWORD_GUIDE_TEXT(
  160. "display.password.guideText", PwmSettingSyntax.LOCALIZED_TEXT_AREA, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  161. PASSWORD_SYNC_MIN_WAIT_TIME(
  162. "passwordSyncMinWaitTime", PwmSettingSyntax.DURATION, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  163. PASSWORD_SYNC_MAX_WAIT_TIME(
  164. "passwordSyncMaxWaitTime", PwmSettingSyntax.DURATION, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  165. PASSWORD_EXPIRE_PRE_TIME(
  166. "expirePreTime", PwmSettingSyntax.DURATION, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  167. PASSWORD_EXPIRE_WARN_TIME(
  168. "expireWarnTime", PwmSettingSyntax.DURATION, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  169. EXPIRE_CHECK_DURING_AUTH(
  170. "expireCheckDuringAuth", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  171. CHANGE_PASSWORD_WRITE_ATTRIBUTES(
  172. "changePassword.writeAttributes", PwmSettingSyntax.ACTION, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  173. PASSWORD_SHOW_AUTOGEN(
  174. "password.showAutoGen", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.CHANGE_PASSWORD_PROFILE ),
  175. // account info
  176. ACCOUNT_INFORMATION_ENABLED(
  177. "display.accountInformation", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ACCOUNT_INFO_SETTINGS ),
  178. ACCOUNT_INFORMATION_PROFILE_LIST(
  179. "accountInfo.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  180. ACCOUNT_INFORMATION_QUERY_MATCH(
  181. "accountInfo.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.ACCOUNT_INFO_PROFILE ),
  182. ACCOUNT_INFORMATION_HISTORY(
  183. "display.passwordHistory", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ACCOUNT_INFO_PROFILE ),
  184. ACCOUNT_INFORMATION_VIEW_STATUS_VALUES(
  185. "accountInfo.viewStatusValues", PwmSettingSyntax.OPTIONLIST, PwmSettingCategory.ACCOUNT_INFO_PROFILE ),
  186. ACCOUNT_INFORMATION_VIEW_FORM(
  187. "accountInfo.view.form", PwmSettingSyntax.FORM, PwmSettingCategory.ACCOUNT_INFO_PROFILE ),
  188. // delete info
  189. DELETE_ACCOUNT_PROFILE_LIST(
  190. "deleteAccount.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  191. DELETE_ACCOUNT_ENABLE(
  192. "deleteAccount.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.DELETE_ACCOUNT_SETTINGS ),
  193. DELETE_ACCOUNT_PERMISSION(
  194. "deleteAccount.permission", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.DELETE_ACCOUNT_PROFILE ),
  195. DELETE_ACCOUNT_AGREEMENT(
  196. "deleteAccount.agreement", PwmSettingSyntax.LOCALIZED_TEXT_AREA, PwmSettingCategory.DELETE_ACCOUNT_PROFILE ),
  197. DELETE_ACCOUNT_DELETE_USER_ENTRY(
  198. "deleteAccount.deleteEntry", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.DELETE_ACCOUNT_PROFILE ),
  199. DELETE_ACCOUNT_ACTIONS(
  200. "deleteAccount.actions", PwmSettingSyntax.ACTION, PwmSettingCategory.DELETE_ACCOUNT_PROFILE ),
  201. DELETE_ACCOUNT_NEXT_URL(
  202. "deleteAccount.nextUrl", PwmSettingSyntax.STRING, PwmSettingCategory.DELETE_ACCOUNT_PROFILE ),
  203. //ldap directories
  204. LDAP_SERVER_URLS(
  205. "ldap.serverUrls", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.LDAP_BASE ),
  206. LDAP_SERVER_CERTS(
  207. "ldap.serverCerts", PwmSettingSyntax.X509CERT, PwmSettingCategory.LDAP_BASE ),
  208. LDAP_PROXY_USER_DN(
  209. "ldap.proxy.username", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_BASE ),
  210. LDAP_PROXY_USER_PASSWORD(
  211. "ldap.proxy.password", PwmSettingSyntax.PASSWORD, PwmSettingCategory.LDAP_BASE ),
  212. LDAP_CONTEXTLESS_ROOT(
  213. "ldap.rootContexts", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.LDAP_BASE ),
  214. LDAP_TEST_USER_DN(
  215. "ldap.testuser.username", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_BASE ),
  216. LDAP_GUID_AUTO_ADD(
  217. "ldap.guid.autoAddValue", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.LDAP_BASE ),
  218. LDAP_SEARCH_TIMEOUT(
  219. "ldap.search.timeoutSeconds", PwmSettingSyntax.DURATION, PwmSettingCategory.LDAP_BASE ),
  220. LDAP_PROFILE_ENABLED(
  221. "ldap.profile.enabled", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.LDAP_BASE ),
  222. LDAP_USERNAME_SEARCH_FILTER(
  223. "ldap.usernameSearchFilter", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_LOGIN ),
  224. LDAP_LOGIN_CONTEXTS(
  225. "ldap.selectableContexts", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.LDAP_LOGIN ),
  226. LDAP_PROFILE_DISPLAY_NAME(
  227. "ldap.profile.displayName", PwmSettingSyntax.LOCALIZED_STRING, PwmSettingCategory.LDAP_LOGIN ),
  228. // ldap attributes
  229. LDAP_USERNAME_ATTRIBUTE(
  230. "ldap.username.attr", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  231. LDAP_GUID_ATTRIBUTE(
  232. "ldap.guidAttribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  233. LDAP_NAMING_ATTRIBUTE(
  234. "ldap.namingAttribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  235. PASSWORD_LAST_UPDATE_ATTRIBUTE(
  236. "passwordLastUpdateAttribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  237. LDAP_USER_GROUP_ATTRIBUTE(
  238. "ldap.user.group.attribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  239. LDAP_GROUP_LABEL_ATTRIBUTE(
  240. "ldap.group.label.attribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  241. EMAIL_USER_MAIL_ATTRIBUTE(
  242. "email.userMailAttribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  243. EMAIL_USER_MAIL_ATTRIBUTE_2(
  244. "email.userMailAttribute2", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  245. EMAIL_USER_MAIL_ATTRIBUTE_3(
  246. "email.userMailAttribute3", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  247. SMS_USER_PHONE_ATTRIBUTE(
  248. "sms.userSmsAttribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  249. SMS_USER_PHONE_ATTRIBUTE_2(
  250. "sms.userSmsAttribute2", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  251. SMS_USER_PHONE_ATTRIBUTE_3(
  252. "sms.userSmsAttribute3", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  253. CHALLENGE_USER_ATTRIBUTE(
  254. "challenge.userAttribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  255. EVENTS_LDAP_ATTRIBUTE(
  256. "events.ldap.attribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  257. CACHED_USER_ATTRIBUTES(
  258. "webservice.userAttributes", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.LDAP_ATTRIBUTES ),
  259. OTP_SECRET_LDAP_ATTRIBUTE(
  260. "otp.secret.ldap.attribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  261. LDAP_ATTRIBUTE_PHOTO(
  262. "peopleSearch.photo.ldapAttribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  263. LDAP_ATTRIBUTE_PHOTO_URL_OVERRIDE(
  264. "peopleSearch.photo.urlOverride", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  265. LDAP_ATTRIBUTE_ORGCHART_PARENT(
  266. "peopleSearch.orgChart.parentAttribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  267. LDAP_ATTRIBUTE_ORGCHART_CHILD(
  268. "peopleSearch.orgChart.childAttribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  269. LDAP_ATTRIBUTE_ORGCHART_ASSISTANT(
  270. "peopleSearch.orgChart.assistantAttribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  271. LDAP_ATTRIBUTE_ORGCHART_WORKFORCEID(
  272. "peopleSearch.orgChart.workforceIdAttribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  273. LDAP_ATTRIBUTE_LANGUAGE(
  274. "ldap.user.language.attribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  275. LDAP_ATTRIBUTE_PWNOTIFY(
  276. "ldap.user.appData.attribute", PwmSettingSyntax.STRING, PwmSettingCategory.LDAP_ATTRIBUTES ),
  277. LDAP_AUTO_SET_LANGUAGE_VALUE(
  278. "ldap.user.language.autoSet", PwmSettingSyntax.SELECT, PwmSettingCategory.LDAP_ATTRIBUTES ),
  279. AUTO_ADD_OBJECT_CLASSES(
  280. "ldap.addObjectClasses", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.LDAP_ATTRIBUTES ),
  281. // ldap global settings
  282. LDAP_PROFILE_LIST(
  283. "ldap.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  284. LDAP_IDLE_TIMEOUT(
  285. "ldap.idleTimeout", PwmSettingSyntax.DURATION, PwmSettingCategory.LDAP_GLOBAL ),
  286. DEFAULT_OBJECT_CLASSES(
  287. "ldap.defaultObjectClasses", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.LDAP_GLOBAL ),
  288. LDAP_FOLLOW_REFERRALS(
  289. "ldap.followReferrals", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.LDAP_GLOBAL ),
  290. LDAP_DUPLICATE_MODE(
  291. "ldap.duplicateMode", PwmSettingSyntax.SELECT, PwmSettingCategory.LDAP_GLOBAL ),
  292. LDAP_SELECTABLE_CONTEXT_MODE(
  293. "ldap.selectableContextMode", PwmSettingSyntax.SELECT, PwmSettingCategory.LDAP_GLOBAL ),
  294. LDAP_IGNORE_UNREACHABLE_PROFILES(
  295. "ldap.ignoreUnreachableProfiles", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.LDAP_GLOBAL ),
  296. LDAP_ENABLE_WIRE_TRACE(
  297. "ldap.wireTrace.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.LDAP_GLOBAL ),
  298. PASSWORD_SYNC_ENABLE_REPLICA_CHECK(
  299. "passwordSync.enableReplicaCheck", PwmSettingSyntax.SELECT, PwmSettingCategory.LDAP_GLOBAL ),
  300. // New multiple email settings
  301. EMAIL_SERVERS(
  302. "email.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  303. EMAIL_SERVER_ADDRESS(
  304. "email.smtp.address", PwmSettingSyntax.STRING, PwmSettingCategory.EMAIL_SERVERS ),
  305. EMAIL_SERVER_TYPE(
  306. "email.smtp.type", PwmSettingSyntax.SELECT, PwmSettingCategory.EMAIL_SERVERS ),
  307. EMAIL_SERVER_PORT(
  308. "email.smtp.port", PwmSettingSyntax.NUMERIC, PwmSettingCategory.EMAIL_SERVERS ),
  309. EMAIL_SERVER_CERTS(
  310. "email.smtp.serverCerts", PwmSettingSyntax.X509CERT, PwmSettingCategory.EMAIL_SERVERS ),
  311. EMAIL_USERNAME(
  312. "email.smtp.username", PwmSettingSyntax.STRING, PwmSettingCategory.EMAIL_SERVERS ),
  313. EMAIL_PASSWORD(
  314. "email.smtp.userpassword", PwmSettingSyntax.PASSWORD, PwmSettingCategory.EMAIL_SERVERS ),
  315. // system wide email settings
  316. EMAIL_DEFAULT_FROM_ADDRESS(
  317. "email.default.fromAddress", PwmSettingSyntax.STRING, PwmSettingCategory.EMAIL_SETTINGS ),
  318. EMAIL_MAX_QUEUE_AGE(
  319. "email.queueMaxAge", PwmSettingSyntax.DURATION, PwmSettingCategory.EMAIL_SETTINGS ),
  320. EMAIL_ADVANCED_SETTINGS(
  321. "email.smtp.advancedSettings", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.EMAIL_SETTINGS ),
  322. // email template
  323. EMAIL_CHANGEPASSWORD(
  324. "email.changePassword", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  325. EMAIL_CHANGEPASSWORD_HELPDESK(
  326. "email.changePassword.helpdesk", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  327. EMAIL_UPDATEPROFILE(
  328. "email.updateProfile", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  329. EMAIL_UPDATEPROFILE_VERIFICATION(
  330. "email.updateProfile.token", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  331. EMAIL_NEWUSER(
  332. "email.newUser", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  333. EMAIL_NEWUSER_VERIFICATION(
  334. "email.newUser.token", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  335. EMAIL_ACTIVATION(
  336. "email.activation", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  337. EMAIL_ACTIVATION_VERIFICATION(
  338. "email.activation.token", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  339. EMAIL_CHALLENGE_TOKEN(
  340. "email.challenge.token", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  341. EMAIL_HELPDESK_TOKEN(
  342. "email.helpdesk.token", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  343. EMAIL_GUEST(
  344. "email.guest", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  345. EMAIL_UPDATEGUEST(
  346. "email.updateguest", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  347. EMAIL_SENDPASSWORD(
  348. "email.sendpassword", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  349. EMAIL_SEND_USERNAME(
  350. "email.sendUsername", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  351. EMAIL_INTRUDERNOTICE(
  352. "email.intruderNotice", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  353. EMAIL_DELETEACCOUNT(
  354. "email.deleteAccount", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  355. EMAIL_HELPDESK_UNLOCK(
  356. "email.helpdesk.unlock", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  357. EMAIL_UNLOCK(
  358. "email.unlock", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  359. EMAIL_PW_EXPIRATION_NOTICE(
  360. "email.pwNotice", PwmSettingSyntax.EMAIL, PwmSettingCategory.EMAIL_TEMPLATES ),
  361. // sms settings
  362. SMS_GATEWAY_URL(
  363. "sms.gatewayURL", PwmSettingSyntax.STRING, PwmSettingCategory.SMS_GATEWAY ),
  364. SMS_GATEWAY_CERTIFICATES(
  365. "sms.gatewayCertificates", PwmSettingSyntax.X509CERT, PwmSettingCategory.SMS_GATEWAY ),
  366. SMS_GATEWAY_METHOD(
  367. "sms.gatewayMethod", PwmSettingSyntax.SELECT, PwmSettingCategory.SMS_GATEWAY ),
  368. SMS_GATEWAY_USER(
  369. "sms.gatewayUser", PwmSettingSyntax.STRING, PwmSettingCategory.SMS_GATEWAY ),
  370. SMS_GATEWAY_PASSWORD(
  371. "sms.gatewayPassword", PwmSettingSyntax.PASSWORD, PwmSettingCategory.SMS_GATEWAY ),
  372. SMS_GATEWAY_AUTHMETHOD(
  373. "sms.gatewayAuthMethod", PwmSettingSyntax.SELECT, PwmSettingCategory.SMS_GATEWAY ),
  374. SMS_REQUEST_DATA(
  375. "sms.requestData", PwmSettingSyntax.TEXT_AREA, PwmSettingCategory.SMS_GATEWAY ),
  376. SMS_REQUEST_CONTENT_TYPE(
  377. "sms.requestContentType", PwmSettingSyntax.STRING, PwmSettingCategory.SMS_GATEWAY ),
  378. SMS_REQUEST_CONTENT_ENCODING(
  379. "sms.requestContentEncoding", PwmSettingSyntax.SELECT, PwmSettingCategory.SMS_GATEWAY ),
  380. SMS_GATEWAY_REQUEST_HEADERS(
  381. "sms.httpRequestHeaders", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.SMS_GATEWAY ),
  382. SMS_MAX_TEXT_LENGTH(
  383. "sms.maxTextLength", PwmSettingSyntax.NUMERIC, PwmSettingCategory.SMS_GATEWAY ),
  384. SMS_SENDER_ID(
  385. "sms.senderID", PwmSettingSyntax.STRING, PwmSettingCategory.SMS_GATEWAY ),
  386. SMS_PHONE_NUMBER_FORMAT(
  387. "sms.phoneNumberFormat", PwmSettingSyntax.SELECT, PwmSettingCategory.SMS_GATEWAY ),
  388. SMS_DEFAULT_COUNTRY_CODE(
  389. "sms.defaultCountryCode", PwmSettingSyntax.NUMERIC, PwmSettingCategory.SMS_GATEWAY ),
  390. SMS_REQUESTID_CHARS(
  391. "sms.requestId.characters", PwmSettingSyntax.STRING, PwmSettingCategory.SMS_GATEWAY ),
  392. SMS_REQUESTID_LENGTH(
  393. "sms.requestId.length", PwmSettingSyntax.NUMERIC, PwmSettingCategory.SMS_GATEWAY ),
  394. SMS_USE_URL_SHORTENER(
  395. "sms.useUrlShortener", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.SMS_GATEWAY ),
  396. SMS_RESPONSE_OK_REGEX(
  397. "sms.responseOkRegex", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.SMS_GATEWAY ),
  398. SMS_SUCCESS_RESULT_CODE(
  399. "sms.successResultCodes", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.SMS_GATEWAY ),
  400. URL_SHORTENER_CLASS(
  401. "urlshortener.classname", PwmSettingSyntax.STRING, PwmSettingCategory.SMS_GATEWAY ),
  402. URL_SHORTENER_PARAMETERS(
  403. "urlshortener.parameters", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.SMS_GATEWAY ),
  404. SMS_MAX_QUEUE_AGE(
  405. "sms.queueMaxAge", PwmSettingSyntax.DURATION, PwmSettingCategory.SMS_GATEWAY ),
  406. SMS_CHALLENGE_TOKEN_TEXT(
  407. "sms.challenge.token.message", PwmSettingSyntax.LOCALIZED_STRING, PwmSettingCategory.SMS_MESSAGES ),
  408. SMS_CHALLENGE_NEW_PASSWORD_TEXT(
  409. "sms.challenge.newpassword.message", PwmSettingSyntax.LOCALIZED_STRING, PwmSettingCategory.SMS_MESSAGES ),
  410. SMS_NEWUSER_TOKEN_TEXT(
  411. "sms.newUser.token.message", PwmSettingSyntax.LOCALIZED_STRING, PwmSettingCategory.SMS_MESSAGES ),
  412. SMS_HELPDESK_TOKEN_TEXT(
  413. "sms.helpdesk.token.message", PwmSettingSyntax.LOCALIZED_STRING, PwmSettingCategory.SMS_MESSAGES ),
  414. SMS_ACTIVATION_VERIFICATION_TEXT(
  415. "sms.activation.token.message", PwmSettingSyntax.LOCALIZED_STRING, PwmSettingCategory.SMS_MESSAGES ),
  416. SMS_ACTIVATION_TEXT(
  417. "sms.activation.message", PwmSettingSyntax.LOCALIZED_STRING, PwmSettingCategory.SMS_MESSAGES ),
  418. SMS_FORGOTTEN_USERNAME_TEXT(
  419. "sms.forgottenUsername.message", PwmSettingSyntax.LOCALIZED_STRING, PwmSettingCategory.SMS_MESSAGES ),
  420. SMS_UPDATE_PROFILE_TOKEN_TEXT(
  421. "sms.updateProfile.token.message", PwmSettingSyntax.LOCALIZED_STRING, PwmSettingCategory.SMS_MESSAGES ),
  422. //global password policy settings
  423. PASSWORD_POLICY_SOURCE(
  424. "password.policy.source", PwmSettingSyntax.SELECT, PwmSettingCategory.PASSWORD_GLOBAL ),
  425. PASSWORD_SHAREDHISTORY_ENABLE(
  426. "password.sharedHistory.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PASSWORD_GLOBAL ),
  427. PASSWORD_SHAREDHISTORY_MAX_AGE(
  428. "password.sharedHistory.age", PwmSettingSyntax.DURATION, PwmSettingCategory.PASSWORD_GLOBAL ),
  429. PASSWORD_POLICY_CASE_SENSITIVITY(
  430. "password.policy.caseSensitivity", PwmSettingSyntax.SELECT, PwmSettingCategory.PASSWORD_GLOBAL ),
  431. PASSWORD_PROFILE_LIST(
  432. "password.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  433. // wordlist settings
  434. WORDLIST_FILENAME(
  435. "pwm.wordlist.location", PwmSettingSyntax.STRING, PwmSettingCategory.WORDLISTS ),
  436. WORDLIST_CASE_SENSITIVE(
  437. "wordlistCaseSensitive", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.WORDLISTS ),
  438. PASSWORD_WORDLIST_WORDSIZE(
  439. "password.wordlist.wordSize", PwmSettingSyntax.NUMERIC, PwmSettingCategory.WORDLISTS ),
  440. SEEDLIST_FILENAME(
  441. "pwm.seedlist.location", PwmSettingSyntax.STRING, PwmSettingCategory.WORDLISTS ),
  442. // password policy profile settings
  443. PASSWORD_POLICY_QUERY_MATCH(
  444. "password.policy.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.PASSWORD_POLICY ),
  445. PASSWORD_POLICY_MINIMUM_LENGTH(
  446. "password.policy.minimumLength", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  447. PASSWORD_POLICY_MAXIMUM_LENGTH(
  448. "password.policy.maximumLength", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  449. PASSWORD_POLICY_MAXIMUM_REPEAT(
  450. "password.policy.maximumRepeat", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  451. PASSWORD_POLICY_MAXIMUM_SEQUENTIAL_REPEAT(
  452. "password.policy.maximumSequentialRepeat", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  453. PASSWORD_POLICY_ALLOW_NUMERIC(
  454. "password.policy.allowNumeric", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PASSWORD_POLICY ),
  455. PASSWORD_POLICY_ALLOW_FIRST_CHAR_NUMERIC(
  456. "password.policy.allowFirstCharNumeric", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PASSWORD_POLICY ),
  457. PASSWORD_POLICY_ALLOW_LAST_CHAR_NUMERIC(
  458. "password.policy.allowLastCharNumeric", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PASSWORD_POLICY ),
  459. PASSWORD_POLICY_MAXIMUM_NUMERIC(
  460. "password.policy.maximumNumeric", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  461. PASSWORD_POLICY_MINIMUM_NUMERIC(
  462. "password.policy.minimumNumeric", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  463. PASSWORD_POLICY_ALLOW_SPECIAL(
  464. "password.policy.allowSpecial", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PASSWORD_POLICY ),
  465. PASSWORD_POLICY_ALLOW_FIRST_CHAR_SPECIAL(
  466. "password.policy.allowFirstCharSpecial", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PASSWORD_POLICY ),
  467. PASSWORD_POLICY_ALLOW_LAST_CHAR_SPECIAL(
  468. "password.policy.allowLastCharSpecial", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PASSWORD_POLICY ),
  469. PASSWORD_POLICY_MAXIMUM_SPECIAL(
  470. "password.policy.maximumSpecial", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  471. PASSWORD_POLICY_MINIMUM_SPECIAL(
  472. "password.policy.minimumSpecial", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  473. PASSWORD_POLICY_MAXIMUM_ALPHA(
  474. "password.policy.maximumAlpha", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  475. PASSWORD_POLICY_MINIMUM_ALPHA(
  476. "password.policy.minimumAlpha", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  477. PASSWORD_POLICY_ALLOW_NON_ALPHA(
  478. "password.policy.allowNonAlpha", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PASSWORD_POLICY ),
  479. PASSWORD_POLICY_MAXIMUM_NON_ALPHA(
  480. "password.policy.maximumNonAlpha", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  481. PASSWORD_POLICY_MINIMUM_NON_ALPHA(
  482. "password.policy.minimumNonAlpha", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  483. PASSWORD_POLICY_MAXIMUM_UPPERCASE(
  484. "password.policy.maximumUpperCase", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  485. PASSWORD_POLICY_MINIMUM_UPPERCASE(
  486. "password.policy.minimumUpperCase", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  487. PASSWORD_POLICY_MAXIMUM_LOWERCASE(
  488. "password.policy.maximumLowerCase", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  489. PASSWORD_POLICY_MINIMUM_LOWERCASE(
  490. "password.policy.minimumLowerCase", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  491. PASSWORD_POLICY_MINIMUM_UNIQUE(
  492. "password.policy.minimumUnique", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  493. PASSWORD_POLICY_MAXIMUM_OLD_PASSWORD_CHARS(
  494. "password.policy.maximumOldPasswordChars", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  495. PASSWORD_POLICY_MINIMUM_LIFETIME(
  496. "password.policy.minimumLifetime", PwmSettingSyntax.DURATION, PwmSettingCategory.PASSWORD_POLICY ),
  497. PASSWORD_POLICY_MAXIMUM_CONSECUTIVE(
  498. "password.policy.maximumConsecutive", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  499. PASSWORD_POLICY_MINIMUM_STRENGTH(
  500. "password.policy.minimumStrength", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  501. PASSWORD_POLICY_ENABLE_WORDLIST(
  502. "password.policy.checkWordlist", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PASSWORD_POLICY ),
  503. PASSWORD_POLICY_AD_COMPLEXITY_LEVEL(
  504. "password.policy.ADComplexityLevel", PwmSettingSyntax.SELECT, PwmSettingCategory.PASSWORD_POLICY ),
  505. PASSWORD_POLICY_AD_COMPLEXITY_MAX_VIOLATIONS(
  506. "password.policy.ADComplexityMaxViolations", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  507. PASSWORD_POLICY_REGULAR_EXPRESSION_MATCH(
  508. "password.policy.regExMatch", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.PASSWORD_POLICY ),
  509. PASSWORD_POLICY_REGULAR_EXPRESSION_NOMATCH(
  510. "password.policy.regExNoMatch", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.PASSWORD_POLICY ),
  511. PASSWORD_POLICY_DISALLOWED_VALUES(
  512. "password.policy.disallowedValues", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.PASSWORD_POLICY ),
  513. PASSWORD_POLICY_DISALLOWED_ATTRIBUTES(
  514. "password.policy.disallowedAttributes", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.PASSWORD_POLICY ),
  515. PASSWORD_POLICY_CHANGE_MESSAGE(
  516. "password.policy.changeMessage", PwmSettingSyntax.LOCALIZED_TEXT_AREA, PwmSettingCategory.PASSWORD_POLICY ),
  517. PASSWORD_POLICY_RULE_TEXT(
  518. "password.policy.ruleText", PwmSettingSyntax.LOCALIZED_TEXT_AREA, PwmSettingCategory.PASSWORD_POLICY ),
  519. PASSWORD_POLICY_DISALLOW_CURRENT(
  520. "password.policy.disallowCurrent", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PASSWORD_POLICY ),
  521. PASSWORD_POLICY_CHAR_GROUPS_MIN_MATCH(
  522. "password.policy.charGroup.minimumMatch", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PASSWORD_POLICY ),
  523. PASSWORD_POLICY_CHAR_GROUPS(
  524. "password.policy.charGroup.regExValues", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.PASSWORD_POLICY ),
  525. // app security settings
  526. PWM_SECURITY_KEY(
  527. "pwm.securityKey", PwmSettingSyntax.PASSWORD, PwmSettingCategory.APP_SECURITY ),
  528. REVERSE_DNS_ENABLE(
  529. "network.reverseDNS.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.APP_SECURITY ),
  530. DISPLAY_SHOW_DETAILED_ERRORS(
  531. "display.showDetailedErrors", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.APP_SECURITY ),
  532. SESSION_MAX_SECONDS(
  533. "session.maxSeconds", PwmSettingSyntax.DURATION, PwmSettingCategory.APP_SECURITY ),
  534. CERTIFICATE_VALIDATION_MODE(
  535. "security.certificate.validationMode", PwmSettingSyntax.SELECT, PwmSettingCategory.APP_SECURITY ),
  536. // web security
  537. SECURITY_ENABLE_FORM_NONCE(
  538. "security.formNonce.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.WEB_SECURITY ),
  539. ENABLE_SESSION_VERIFICATION(
  540. "enableSessionVerification", PwmSettingSyntax.SELECT, PwmSettingCategory.WEB_SECURITY ),
  541. DISALLOWED_HTTP_INPUTS(
  542. "disallowedInputs", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.WEB_SECURITY ),
  543. USE_X_FORWARDED_FOR_HEADER(
  544. "useXForwardedForHeader", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.WEB_SECURITY ),
  545. MULTI_IP_SESSION_ALLOWED(
  546. "network.allowMultiIPSession", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.WEB_SECURITY ),
  547. REQUIRED_HEADERS(
  548. "network.requiredHttpHeaders", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.WEB_SECURITY ),
  549. IP_PERMITTED_RANGE(
  550. "network.ip.permittedRange", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.WEB_SECURITY ),
  551. SECURITY_PAGE_LEAVE_NOTICE_TIMEOUT(
  552. "security.page.leaveNoticeTimeout", PwmSettingSyntax.NUMERIC, PwmSettingCategory.WEB_SECURITY ),
  553. SECURITY_PREVENT_FRAMING(
  554. "security.preventFraming", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.WEB_SECURITY ),
  555. SECURITY_REDIRECT_WHITELIST(
  556. "security.redirectUrl.whiteList", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.WEB_SECURITY ),
  557. SECURITY_CSP_HEADER(
  558. "security.cspHeader", PwmSettingSyntax.STRING, PwmSettingCategory.WEB_SECURITY ),
  559. // catpcha
  560. RECAPTCHA_KEY_PUBLIC(
  561. "captcha.recaptcha.publicKey", PwmSettingSyntax.STRING, PwmSettingCategory.CAPTCHA ),
  562. RECAPTCHA_KEY_PRIVATE(
  563. "captcha.recaptcha.privateKey", PwmSettingSyntax.PASSWORD, PwmSettingCategory.CAPTCHA ),
  564. CAPTCHA_PROTECTED_PAGES(
  565. "captcha.protectedPages", PwmSettingSyntax.OPTIONLIST, PwmSettingCategory.CAPTCHA ),
  566. CAPTCHA_SKIP_PARAM(
  567. "captcha.skip.param", PwmSettingSyntax.STRING, PwmSettingCategory.CAPTCHA ),
  568. CAPTCHA_SKIP_COOKIE(
  569. "captcha.skip.cookie", PwmSettingSyntax.STRING, PwmSettingCategory.CAPTCHA ),
  570. CAPTCHA_INTRUDER_COUNT_TRIGGER(
  571. "captcha.intruderAttemptTrigger", PwmSettingSyntax.NUMERIC, PwmSettingCategory.CAPTCHA ),
  572. CAPTCHA_RECAPTCHA_MODE(
  573. "captcha.recaptcha.mode", PwmSettingSyntax.SELECT, PwmSettingCategory.CAPTCHA ),
  574. // intruder detection
  575. INTRUDER_ENABLE(
  576. "intruder.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.INTRUDER_SETTINGS ),
  577. INTRUDER_STORAGE_METHOD(
  578. "intruder.storageMethod", PwmSettingSyntax.SELECT, PwmSettingCategory.INTRUDER_SETTINGS ),
  579. SECURITY_SIMULATE_LDAP_BAD_PASSWORD(
  580. "security.ldap.simulateBadPassword", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.INTRUDER_SETTINGS ),
  581. INTRUDER_USER_RESET_TIME(
  582. "intruder.user.resetTime", PwmSettingSyntax.DURATION, PwmSettingCategory.INTRUDER_TIMEOUTS ),
  583. INTRUDER_USER_MAX_ATTEMPTS(
  584. "intruder.user.maxAttempts", PwmSettingSyntax.NUMERIC, PwmSettingCategory.INTRUDER_TIMEOUTS ),
  585. INTRUDER_USER_CHECK_TIME(
  586. "intruder.user.checkTime", PwmSettingSyntax.DURATION, PwmSettingCategory.INTRUDER_TIMEOUTS ),
  587. INTRUDER_ATTRIBUTE_RESET_TIME(
  588. "intruder.attribute.resetTime", PwmSettingSyntax.DURATION, PwmSettingCategory.INTRUDER_TIMEOUTS ),
  589. INTRUDER_ATTRIBUTE_MAX_ATTEMPTS(
  590. "intruder.attribute.maxAttempts", PwmSettingSyntax.NUMERIC, PwmSettingCategory.INTRUDER_TIMEOUTS ),
  591. INTRUDER_ATTRIBUTE_CHECK_TIME(
  592. "intruder.attribute.checkTime", PwmSettingSyntax.DURATION, PwmSettingCategory.INTRUDER_TIMEOUTS ),
  593. INTRUDER_TOKEN_DEST_RESET_TIME(
  594. "intruder.tokenDest.resetTime", PwmSettingSyntax.DURATION, PwmSettingCategory.INTRUDER_TIMEOUTS ),
  595. INTRUDER_TOKEN_DEST_MAX_ATTEMPTS(
  596. "intruder.tokenDest.maxAttempts", PwmSettingSyntax.NUMERIC, PwmSettingCategory.INTRUDER_TIMEOUTS ),
  597. INTRUDER_TOKEN_DEST_CHECK_TIME(
  598. "intruder.tokenDest.checkTime", PwmSettingSyntax.DURATION, PwmSettingCategory.INTRUDER_TIMEOUTS ),
  599. INTRUDER_ADDRESS_RESET_TIME(
  600. "intruder.address.resetTime", PwmSettingSyntax.DURATION, PwmSettingCategory.INTRUDER_TIMEOUTS ),
  601. INTRUDER_ADDRESS_MAX_ATTEMPTS(
  602. "intruder.address.maxAttempts", PwmSettingSyntax.NUMERIC, PwmSettingCategory.INTRUDER_TIMEOUTS ),
  603. INTRUDER_ADDRESS_CHECK_TIME(
  604. "intruder.address.checkTime", PwmSettingSyntax.DURATION, PwmSettingCategory.INTRUDER_TIMEOUTS ),
  605. INTRUDER_SESSION_MAX_ATTEMPTS(
  606. "intruder.session.maxAttempts", PwmSettingSyntax.NUMERIC, PwmSettingCategory.INTRUDER_TIMEOUTS ),
  607. // token settings
  608. TOKEN_STORAGEMETHOD(
  609. "token.storageMethod", PwmSettingSyntax.SELECT, PwmSettingCategory.TOKEN ),
  610. TOKEN_CHARACTERS(
  611. "token.characters", PwmSettingSyntax.STRING, PwmSettingCategory.TOKEN ),
  612. TOKEN_LENGTH(
  613. "token.length", PwmSettingSyntax.NUMERIC, PwmSettingCategory.TOKEN ),
  614. TOKEN_LIFETIME(
  615. "token.lifetime", PwmSettingSyntax.DURATION, PwmSettingCategory.TOKEN ),
  616. TOKEN_LDAP_ATTRIBUTE(
  617. "token.ldap.attribute", PwmSettingSyntax.STRING, PwmSettingCategory.TOKEN ),
  618. TOKEN_ENABLE_VALUE_MASKING(
  619. "token.valueMasking.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.TOKEN ),
  620. // OTP
  621. OTP_PROFILE_LIST(
  622. "otp.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  623. OTP_SETUP_USER_PERMISSION(
  624. "otp.secret.allowSetup.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.OTP_PROFILE ),
  625. OTP_ALLOW_SETUP(
  626. "otp.enabled", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.OTP_PROFILE ),
  627. OTP_FORCE_SETUP(
  628. "otp.forceSetup", PwmSettingSyntax.SELECT, PwmSettingCategory.OTP_PROFILE ),
  629. OTP_SECRET_IDENTIFIER(
  630. "otp.secret.identifier", PwmSettingSyntax.STRING, PwmSettingCategory.OTP_PROFILE ),
  631. OTP_RECOVERY_CODES(
  632. "otp.secret.recoveryCodes", PwmSettingSyntax.NUMERIC, PwmSettingCategory.OTP_PROFILE ),
  633. OTP_SECRET_READ_PREFERENCE(
  634. "otp.secret.readPreference", PwmSettingSyntax.SELECT, PwmSettingCategory.OTP_SETTINGS ),
  635. OTP_SECRET_WRITE_PREFERENCE(
  636. "otp.secret.writePreference", PwmSettingSyntax.SELECT, PwmSettingCategory.OTP_SETTINGS ),
  637. OTP_SECRET_STORAGEFORMAT(
  638. "otp.secret.storageFormat", PwmSettingSyntax.SELECT, PwmSettingCategory.OTP_SETTINGS ),
  639. OTP_SECRET_ENCRYPT(
  640. "otp.secret.encrypt", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.OTP_SETTINGS ),
  641. // logger settings
  642. EVENTS_JAVA_STDOUT_LEVEL(
  643. "events.java.stdoutLevel", PwmSettingSyntax.SELECT, PwmSettingCategory.LOGGING ),
  644. EVENTS_LOCALDB_LOG_LEVEL(
  645. "events.pwmDB.logLevel", PwmSettingSyntax.SELECT, PwmSettingCategory.LOGGING ),
  646. EVENTS_FILE_LEVEL(
  647. "events.fileAppender.level", PwmSettingSyntax.SELECT, PwmSettingCategory.LOGGING ),
  648. EVENTS_PWMDB_MAX_EVENTS(
  649. "events.pwmDB.maxEvents", PwmSettingSyntax.NUMERIC, PwmSettingCategory.LOGGING ),
  650. EVENTS_PWMDB_MAX_AGE(
  651. "events.pwmDB.maxAge", PwmSettingSyntax.DURATION, PwmSettingCategory.LOGGING ),
  652. EVENTS_ALERT_DAILY_SUMMARY(
  653. "events.alert.dailySummary.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.LOGGING ),
  654. EVENTS_JAVA_LOG4JCONFIG_FILE(
  655. "events.java.log4jconfigFile", PwmSettingSyntax.STRING, PwmSettingCategory.LOGGING ),
  656. PASSWORD_STRENGTH_METER_TYPE(
  657. "password.strengthMeter.type", PwmSettingSyntax.SELECT, PwmSettingCategory.LOGGING ),
  658. // auditingsettings
  659. AUDIT_SYSTEM_EVENTS(
  660. "audit.system.eventList", PwmSettingSyntax.OPTIONLIST, PwmSettingCategory.AUDIT_CONFIG ),
  661. AUDIT_USER_EVENTS(
  662. "audit.user.eventList", PwmSettingSyntax.OPTIONLIST, PwmSettingCategory.AUDIT_CONFIG ),
  663. EVENTS_AUDIT_MAX_AGE(
  664. "events.audit.maxAge", PwmSettingSyntax.DURATION, PwmSettingCategory.AUDIT_CONFIG ),
  665. EVENTS_AUDIT_MAX_EVENTS(
  666. "events.audit.maxEvents", PwmSettingSyntax.NUMERIC, PwmSettingCategory.AUDIT_CONFIG ),
  667. EVENTS_USER_STORAGE_METHOD(
  668. "events.user.storageMethod", PwmSettingSyntax.SELECT, PwmSettingCategory.USER_HISTORY ),
  669. EVENTS_USER_EVENT_TYPES(
  670. "events.user.eventList", PwmSettingSyntax.OPTIONLIST, PwmSettingCategory.USER_HISTORY ),
  671. EVENTS_LDAP_MAX_EVENTS(
  672. "events.ldap.maxEvents", PwmSettingSyntax.NUMERIC, PwmSettingCategory.USER_HISTORY ),
  673. AUDIT_EMAIL_SYSTEM_TO(
  674. "email.adminAlert.toAddress", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.AUDIT_FORWARD ),
  675. AUDIT_EMAIL_USER_TO(
  676. "audit.userEvent.toAddress", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.AUDIT_FORWARD ),
  677. AUDIT_SYSLOG_SERVERS(
  678. "audit.syslog.servers", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.AUDIT_FORWARD ),
  679. AUDIT_SYSLOG_CERTIFICATES(
  680. "audit.syslog.certificates", PwmSettingSyntax.X509CERT, PwmSettingCategory.AUDIT_FORWARD ),
  681. AUDIT_SYSLOG_OUTPUT_FORMAT(
  682. "audit.syslog.outputFormat", PwmSettingSyntax.SELECT, PwmSettingCategory.AUDIT_FORWARD ),
  683. // challenge settings
  684. CHALLENGE_ENABLE(
  685. "challenge.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.CHALLENGE ),
  686. CHALLENGE_FORCE_SETUP(
  687. "challenge.forceSetup", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.CHALLENGE ),
  688. CHALLENGE_SHOW_CONFIRMATION(
  689. "challenge.showConfirmation", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.CHALLENGE ),
  690. CHALLENGE_CASE_INSENSITIVE(
  691. "challenge.caseInsensitive", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.CHALLENGE ),
  692. CHALLENGE_ALLOW_DUPLICATE_RESPONSES(
  693. "challenge.allowDuplicateResponses", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.CHALLENGE ),
  694. QUERY_MATCH_SETUP_RESPONSE(
  695. "challenge.allowSetup.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.CHALLENGE ),
  696. QUERY_MATCH_CHECK_RESPONSES(
  697. "command.checkResponses.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.CHALLENGE ),
  698. // challenge policy profile
  699. CHALLENGE_PROFILE_LIST(
  700. "challenge.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  701. CHALLENGE_POLICY_QUERY_MATCH(
  702. "challenge.policy.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.CHALLENGE_POLICY ),
  703. CHALLENGE_RANDOM_CHALLENGES(
  704. "challenge.randomChallenges", PwmSettingSyntax.CHALLENGE, PwmSettingCategory.CHALLENGE_POLICY ),
  705. CHALLENGE_REQUIRED_CHALLENGES(
  706. "challenge.requiredChallenges", PwmSettingSyntax.CHALLENGE, PwmSettingCategory.CHALLENGE_POLICY ),
  707. CHALLENGE_MIN_RANDOM_REQUIRED(
  708. "challenge.minRandomRequired", PwmSettingSyntax.NUMERIC, PwmSettingCategory.CHALLENGE_POLICY ),
  709. CHALLENGE_MIN_RANDOM_SETUP(
  710. "challenge.minRandomsSetup", PwmSettingSyntax.NUMERIC, PwmSettingCategory.CHALLENGE_POLICY ),
  711. CHALLENGE_HELPDESK_RANDOM_CHALLENGES(
  712. "challenge.helpdesk.randomChallenges", PwmSettingSyntax.CHALLENGE, PwmSettingCategory.CHALLENGE_POLICY ),
  713. CHALLENGE_HELPDESK_REQUIRED_CHALLENGES(
  714. "challenge.helpdesk.requiredChallenges", PwmSettingSyntax.CHALLENGE, PwmSettingCategory.CHALLENGE_POLICY ),
  715. CHALLENGE_HELPDESK_MIN_RANDOM_SETUP(
  716. "challenge.helpdesk.minRandomsSetup", PwmSettingSyntax.NUMERIC, PwmSettingCategory.CHALLENGE_POLICY ),
  717. // recovery settings
  718. FORGOTTEN_PASSWORD_ENABLE(
  719. "recovery.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.RECOVERY_SETTINGS ),
  720. FORGOTTEN_PASSWORD_SEARCH_FORM(
  721. "recovery.form", PwmSettingSyntax.FORM, PwmSettingCategory.RECOVERY_SETTINGS ),
  722. FORGOTTEN_PASSWORD_SEARCH_FILTER(
  723. "recovery.searchFilter", PwmSettingSyntax.STRING, PwmSettingCategory.RECOVERY_SETTINGS ),
  724. FORGOTTEN_PASSWORD_READ_PREFERENCE(
  725. "recovery.response.readPreference", PwmSettingSyntax.SELECT, PwmSettingCategory.RECOVERY_SETTINGS ),
  726. FORGOTTEN_PASSWORD_WRITE_PREFERENCE(
  727. "recovery.response.writePreference", PwmSettingSyntax.SELECT, PwmSettingCategory.RECOVERY_SETTINGS ),
  728. CHALLENGE_STORAGE_HASHED(
  729. "response.hashMethod", PwmSettingSyntax.SELECT, PwmSettingCategory.RECOVERY_SETTINGS ),
  730. RECOVERY_BOGUS_USER_ENABLE(
  731. "recovery.bogus.user.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.RECOVERY_SETTINGS ),
  732. // recovery profile
  733. RECOVERY_PROFILE_LIST(
  734. "recovery.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  735. RECOVERY_PROFILE_QUERY_MATCH(
  736. "recovery.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.RECOVERY_DEF ),
  737. RECOVERY_VERIFICATION_METHODS(
  738. "recovery.verificationMethods", PwmSettingSyntax.VERIFICATION_METHOD, PwmSettingCategory.RECOVERY_DEF ),
  739. RECOVERY_TOKEN_SEND_METHOD(
  740. "challenge.token.sendMethod", PwmSettingSyntax.SELECT, PwmSettingCategory.RECOVERY_DEF ),
  741. RECOVERY_ACTION(
  742. "recovery.action", PwmSettingSyntax.SELECT, PwmSettingCategory.RECOVERY_DEF ),
  743. RECOVERY_SENDNEWPW_METHOD(
  744. "recovery.sendNewPassword.sendMethod", PwmSettingSyntax.SELECT, PwmSettingCategory.RECOVERY_DEF ),
  745. RECOVERY_ATTRIBUTE_FORM(
  746. "challenge.requiredAttributes", PwmSettingSyntax.FORM, PwmSettingCategory.RECOVERY_DEF ),
  747. // recover options
  748. RECOVERY_ALLOW_UNLOCK(
  749. "challenge.allowUnlock", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.RECOVERY_OPTIONS ),
  750. RECOVERY_ALLOW_WHEN_LOCKED(
  751. "recovery.allowWhenLocked", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.RECOVERY_OPTIONS ),
  752. TOKEN_RESEND_ENABLE(
  753. "recovery.token.resend.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.RECOVERY_OPTIONS ),
  754. RECOVERY_MINIMUM_PASSWORD_LIFETIME_OPTIONS(
  755. "recovery.minimumPasswordLifetimeOptions", PwmSettingSyntax.SELECT, PwmSettingCategory.RECOVERY_OPTIONS ),
  756. RECOVERY_POST_ACTIONS(
  757. "recovery.postActions", PwmSettingSyntax.ACTION, PwmSettingCategory.RECOVERY_OPTIONS ),
  758. // recovery oauth
  759. RECOVERY_OAUTH_ID_LOGIN_URL(
  760. "recovery.oauth.idserver.loginUrl", PwmSettingSyntax.STRING, PwmSettingCategory.RECOVERY_OAUTH ),
  761. RECOVERY_OAUTH_ID_CODERESOLVE_URL(
  762. "recovery.oauth.idserver.codeResolveUrl", PwmSettingSyntax.STRING, PwmSettingCategory.RECOVERY_OAUTH ),
  763. RECOVERY_OAUTH_ID_ATTRIBUTES_URL(
  764. "recovery.oauth.idserver.attributesUrl", PwmSettingSyntax.STRING, PwmSettingCategory.RECOVERY_OAUTH ),
  765. RECOVERY_OAUTH_ID_CERTIFICATE(
  766. "recovery.oauth.idserver.serverCerts", PwmSettingSyntax.X509CERT, PwmSettingCategory.RECOVERY_OAUTH ),
  767. RECOVERY_OAUTH_ID_CLIENTNAME(
  768. "recovery.oauth.idserver.clientName", PwmSettingSyntax.STRING, PwmSettingCategory.RECOVERY_OAUTH ),
  769. RECOVERY_OAUTH_ID_SECRET(
  770. "recovery.oauth.idserver.secret", PwmSettingSyntax.PASSWORD, PwmSettingCategory.RECOVERY_OAUTH ),
  771. RECOVERY_OAUTH_ID_DN_ATTRIBUTE_NAME(
  772. "recovery.oauth.idserver.dnAttributeName", PwmSettingSyntax.STRING, PwmSettingCategory.RECOVERY_OAUTH ),
  773. RECOVERY_OAUTH_ID_USERNAME_SEND_VALUE(
  774. "recovery.oauth.idserver.usernameSendValue", PwmSettingSyntax.STRING, PwmSettingCategory.RECOVERY_OAUTH ),
  775. // forgotten username
  776. FORGOTTEN_USERNAME_ENABLE(
  777. "forgottenUsername.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.FORGOTTEN_USERNAME ),
  778. FORGOTTEN_USERNAME_FORM(
  779. "forgottenUsername.form", PwmSettingSyntax.FORM, PwmSettingCategory.FORGOTTEN_USERNAME ),
  780. FORGOTTEN_USERNAME_SEARCH_FILTER(
  781. "forgottenUsername.searchFilter", PwmSettingSyntax.STRING, PwmSettingCategory.FORGOTTEN_USERNAME ),
  782. FORGOTTEN_USERNAME_MESSAGE(
  783. "forgottenUsername.message", PwmSettingSyntax.LOCALIZED_TEXT_AREA, PwmSettingCategory.FORGOTTEN_USERNAME ),
  784. FORGOTTEN_USERNAME_SEND_USERNAME_METHOD(
  785. "forgottenUsername.sendUsername.sendMethod", PwmSettingSyntax.SELECT, PwmSettingCategory.FORGOTTEN_USERNAME ),
  786. // new user settings
  787. NEWUSER_ENABLE(
  788. "newUser.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.NEWUSER_SETTINGS ),
  789. NEWUSER_PROFILE_LIST(
  790. "newUser.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  791. NEWUSER_FORM(
  792. "newUser.form", PwmSettingSyntax.FORM, PwmSettingCategory.NEWUSER_PROFILE ),
  793. NEWUSER_LDAP_PROFILE(
  794. "newUser.ldapProfile", PwmSettingSyntax.STRING, PwmSettingCategory.NEWUSER_PROFILE ),
  795. NEWUSER_CONTEXT(
  796. "newUser.createContext", PwmSettingSyntax.STRING, PwmSettingCategory.NEWUSER_PROFILE ),
  797. NEWUSER_AGREEMENT_MESSAGE(
  798. "display.newuser.agreement", PwmSettingSyntax.LOCALIZED_TEXT_AREA, PwmSettingCategory.NEWUSER_PROFILE ),
  799. NEWUSER_PROFILE_DISPLAY_NAME(
  800. "newUser.profile.displayName", PwmSettingSyntax.LOCALIZED_STRING, PwmSettingCategory.NEWUSER_PROFILE ),
  801. NEWUSER_PROFILE_DISPLAY_VISIBLE(
  802. "newUser.profile.visible", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.NEWUSER_PROFILE ),
  803. NEWUSER_WRITE_ATTRIBUTES(
  804. "newUser.writeAttributes", PwmSettingSyntax.ACTION, PwmSettingCategory.NEWUSER_PROFILE ),
  805. NEWUSER_DELETE_ON_FAIL(
  806. "newUser.deleteOnFail", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.NEWUSER_PROFILE ),
  807. NEWUSER_LOGOUT_AFTER_CREATION(
  808. "newUser.logoutAfterCreation", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.NEWUSER_PROFILE ),
  809. NEWUSER_USERNAME_DEFINITION(
  810. "newUser.username.definition", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.NEWUSER_PROFILE ),
  811. NEWUSER_EMAIL_VERIFICATION(
  812. "newUser.email.verification", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.NEWUSER_PROFILE ),
  813. NEWUSER_SMS_VERIFICATION(
  814. "newUser.sms.verification", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.NEWUSER_PROFILE ),
  815. NEWUSER_EXTERNAL_VERIFICATION(
  816. "newUser.external.verification", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.NEWUSER_PROFILE ),
  817. NEWUSER_PASSWORD_POLICY_USER(
  818. "newUser.passwordPolicy.user", PwmSettingSyntax.STRING, PwmSettingCategory.NEWUSER_PROFILE ),
  819. NEWUSER_MINIMUM_WAIT_TIME(
  820. "newUser.minimumWaitTime", PwmSettingSyntax.DURATION, PwmSettingCategory.NEWUSER_PROFILE ),
  821. NEWUSER_REDIRECT_URL(
  822. "newUser.redirectUrl", PwmSettingSyntax.STRING, PwmSettingCategory.NEWUSER_PROFILE ),
  823. NEWUSER_PROMPT_FOR_PASSWORD(
  824. "newUser.promptForPassword", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.NEWUSER_PROFILE ),
  825. NEWUSER_TOKEN_LIFETIME_EMAIL(
  826. "newUser.token.lifetime", PwmSettingSyntax.DURATION, PwmSettingCategory.NEWUSER_PROFILE ),
  827. NEWUSER_TOKEN_LIFETIME_SMS(
  828. "newUser.token.lifetime.sms", PwmSettingSyntax.DURATION, PwmSettingCategory.NEWUSER_PROFILE ),
  829. // guest settings
  830. GUEST_ENABLE(
  831. "guest.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.GUEST ),
  832. GUEST_CONTEXT(
  833. "guest.createContext", PwmSettingSyntax.STRING, PwmSettingCategory.GUEST ),
  834. GUEST_ADMIN_GROUP(
  835. "guest.adminGroup", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.GUEST ),
  836. GUEST_FORM(
  837. "guest.form", PwmSettingSyntax.FORM, PwmSettingCategory.GUEST ),
  838. GUEST_UPDATE_FORM(
  839. "guest.update.form", PwmSettingSyntax.FORM, PwmSettingCategory.GUEST ),
  840. GUEST_WRITE_ATTRIBUTES(
  841. "guest.writeAttributes", PwmSettingSyntax.ACTION, PwmSettingCategory.GUEST ),
  842. GUEST_ADMIN_ATTRIBUTE(
  843. "guest.adminAttribute", PwmSettingSyntax.STRING, PwmSettingCategory.GUEST ),
  844. GUEST_EDIT_ORIG_ADMIN_ONLY(
  845. "guest.editOriginalAdminOnly", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.GUEST ),
  846. GUEST_MAX_VALID_DAYS(
  847. "guest.maxValidDays", PwmSettingSyntax.NUMERIC, PwmSettingCategory.GUEST ),
  848. GUEST_EXPIRATION_ATTRIBUTE(
  849. "guest.expirationAttribute", PwmSettingSyntax.STRING, PwmSettingCategory.GUEST ),
  850. // activation settings
  851. ACTIVATE_USER_ENABLE(
  852. "activateUser.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ACTIVATION_SETTINGS ),
  853. ACTIVATE_USER_FORM(
  854. "activateUser.form", PwmSettingSyntax.FORM, PwmSettingCategory.ACTIVATION_SETTINGS ),
  855. ACTIVATE_USER_SEARCH_FILTER(
  856. "activateUser.searchFilter", PwmSettingSyntax.STRING, PwmSettingCategory.ACTIVATION_SETTINGS ),
  857. ACTIVATE_USER_PROFILE_LIST(
  858. "activateUser.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  859. ACTIVATE_USER_QUERY_MATCH(
  860. "activateUser.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.ACTIVATION_PROFILE ),
  861. ACTIVATE_USER_UNLOCK(
  862. "activateUser.allowUnlock", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ACTIVATION_PROFILE ),
  863. ACTIVATE_TOKEN_SEND_METHOD(
  864. "activateUser.token.sendMethod", PwmSettingSyntax.SELECT, PwmSettingCategory.ACTIVATION_PROFILE ),
  865. ACTIVATE_AGREEMENT_MESSAGE(
  866. "display.activateUser.agreement", PwmSettingSyntax.LOCALIZED_TEXT_AREA, PwmSettingCategory.ACTIVATION_PROFILE ),
  867. ACTIVATE_USER_PRE_WRITE_ATTRIBUTES(
  868. "activateUser.writePreAttributes", PwmSettingSyntax.ACTION, PwmSettingCategory.ACTIVATION_PROFILE ),
  869. ACTIVATE_USER_POST_WRITE_ATTRIBUTES(
  870. "activateUser.writePostAttributes", PwmSettingSyntax.ACTION, PwmSettingCategory.ACTIVATION_PROFILE ),
  871. // update profile
  872. UPDATE_PROFILE_ENABLE(
  873. "updateAttributes.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UPDATE_SETTINGS ),
  874. UPDATE_PROFILE__PROFILE_LIST(
  875. "updateAttributes.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  876. UPDATE_PROFILE_QUERY_MATCH(
  877. "updateAttributes.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.UPDATE_PROFILE ),
  878. UPDATE_PROFILE_WRITE_ATTRIBUTES(
  879. "updateAttributes.writeAttributes", PwmSettingSyntax.ACTION, PwmSettingCategory.UPDATE_PROFILE ),
  880. UPDATE_PROFILE_FORCE_SETUP(
  881. "updateAttributes.forceSetup", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UPDATE_PROFILE ),
  882. UPDATE_PROFILE_AGREEMENT_MESSAGE(
  883. "display.updateAttributes.agreement", PwmSettingSyntax.LOCALIZED_TEXT_AREA, PwmSettingCategory.UPDATE_PROFILE ),
  884. UPDATE_PROFILE_FORM(
  885. "updateAttributes.form", PwmSettingSyntax.FORM, PwmSettingCategory.UPDATE_PROFILE ),
  886. UPDATE_PROFILE_SHOW_CONFIRMATION(
  887. "updateAttributes.showConfirmation", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UPDATE_PROFILE ),
  888. UPDATE_PROFILE_EMAIL_VERIFICATION(
  889. "updateAttributes.email.verification", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UPDATE_PROFILE ),
  890. UPDATE_PROFILE_SMS_VERIFICATION(
  891. "updateAttributes.sms.verification", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UPDATE_PROFILE ),
  892. UPDATE_PROFILE_TOKEN_LIFETIME_EMAIL(
  893. "updateAttributes.token.lifetime", PwmSettingSyntax.DURATION, PwmSettingCategory.UPDATE_PROFILE ),
  894. UPDATE_PROFILE_TOKEN_LIFETIME_SMS(
  895. "updateAttributes.token.lifetime.sms", PwmSettingSyntax.DURATION, PwmSettingCategory.UPDATE_PROFILE ),
  896. UPDATE_PROFILE_CUSTOMLINKS(
  897. "updateAttributes.customLinks", PwmSettingSyntax.CUSTOMLINKS, PwmSettingCategory.UPDATE_PROFILE ),
  898. // shortcut settings
  899. SHORTCUT_ENABLE(
  900. "shortcut.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.SHORTCUT ),
  901. SHORTCUT_ITEMS(
  902. "shortcut.items", PwmSettingSyntax.LOCALIZED_STRING_ARRAY, PwmSettingCategory.SHORTCUT ),
  903. SHORTCUT_HEADER_NAMES(
  904. "shortcut.httpHeaders", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.SHORTCUT ),
  905. SHORTCUT_NEW_WINDOW(
  906. "shortcut.newWindow", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.SHORTCUT ),
  907. // peoplesearch settings
  908. PEOPLE_SEARCH_ENABLE(
  909. "peopleSearch.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PEOPLE_SEARCH_SETTINGS ),
  910. PEOPLE_SEARCH_ENABLE_PUBLIC(
  911. "peopleSearch.enablePublic", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PEOPLE_SEARCH_SETTINGS ),
  912. PEOPLE_SEARCH_PUBLIC_PROFILE(
  913. "peopleSearch.public.profile", PwmSettingSyntax.STRING, PwmSettingCategory.PEOPLE_SEARCH_SETTINGS ),
  914. PEOPLESEARCH_PROFILE_LIST(
  915. "peopleSearch.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  916. PEOPLE_SEARCH_QUERY_MATCH(
  917. "peopleSearch.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  918. PEOPLE_SEARCH_SEARCH_FORM(
  919. "peopleSearch.search.form", PwmSettingSyntax.FORM, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  920. PEOPLE_SEARCH_RESULT_FORM(
  921. "peopleSearch.result.form", PwmSettingSyntax.FORM, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  922. PEOPLE_SEARCH_DETAIL_FORM(
  923. "peopleSearch.detail.form", PwmSettingSyntax.FORM, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  924. PEOPLE_SEARCH_RESULT_LIMIT(
  925. "peopleSearch.result.limit", PwmSettingSyntax.NUMERIC, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  926. PEOPLE_SEARCH_USE_PROXY(
  927. "peopleSearch.useProxy", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  928. PEOPLE_SEARCH_DISPLAY_NAMES_CARD_LABELS(
  929. "peopleSearch.displayName.cardLabels", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  930. PEOPLE_SEARCH_MAX_CACHE_SECONDS(
  931. "peopleSearch.maxCacheSeconds", PwmSettingSyntax.DURATION, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  932. PEOPLE_SEARCH_ENABLE_PHOTO(
  933. "peopleSearch.enablePhoto", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  934. PEOPLE_SEARCH_PHOTO_QUERY_FILTER(
  935. "peopleSearch.photo.queryFilter", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  936. PEOPLE_SEARCH_SEARCH_FILTER(
  937. "peopleSearch.searchFilter", PwmSettingSyntax.STRING, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  938. PEOPLE_SEARCH_SEARCH_BASE(
  939. "peopleSearch.searchBase", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  940. PEOPLE_SEARCH_ENABLE_ORGCHART(
  941. "peopleSearch.enableOrgChart", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  942. PEOPLE_SEARCH_ENABLE_EXPORT(
  943. "peopleSearch.enableExport", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  944. PEOPLE_SEARCH_ENABLE_TEAM_MAILTO(
  945. "peopleSearch.enableTeamMailto", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  946. PEOPLE_SEARCH_ENABLE_PRINTING(
  947. "peopleSearch.enablePrinting", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  948. PEOPLE_SEARCH_IDLE_TIMEOUT_SECONDS(
  949. "peopleSearch.idleTimeout", PwmSettingSyntax.DURATION, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  950. PEOPLE_SEARCH_ENABLE_ADVANCED_SEARCH(
  951. "peopleSearch.advancedSearch.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  952. // edirectory settings
  953. EDIRECTORY_STORE_NMAS_RESPONSES(
  954. "ldap.edirectory.storeNmasResponses", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.EDIR_SETTINGS ),
  955. EDIRECTORY_USE_NMAS_RESPONSES(
  956. "ldap.edirectory.useNmasResponses", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.EDIR_SETTINGS ),
  957. EDIRECTORY_READ_USER_PWD(
  958. "ldap.edirectory.readUserPwd", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.EDIR_SETTINGS ),
  959. EDIRECTORY_READ_CHALLENGE_SET(
  960. "ldap.edirectory.readChallengeSets", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.EDIR_CR_SETTINGS ),
  961. EDIRECTORY_CR_MIN_RANDOM_DURING_SETUP(
  962. "ldap.edirectory.cr.minRandomDuringSetup", PwmSettingSyntax.NUMERIC, PwmSettingCategory.EDIR_CR_SETTINGS ),
  963. EDIRECTORY_CR_APPLY_WORDLIST(
  964. "ldap.edirectory.cr.applyWordlist", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.EDIR_CR_SETTINGS ),
  965. EDIRECTORY_CR_MAX_QUESTION_CHARS_IN__ANSWER(
  966. "ldap.edirectory.cr.maxQuestionCharsInAnswer", PwmSettingSyntax.NUMERIC, PwmSettingCategory.EDIR_CR_SETTINGS ),
  967. // active directory
  968. AD_USE_PROXY_FOR_FORGOTTEN(
  969. "ldap.ad.proxyForgotten", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ACTIVE_DIRECTORY ),
  970. AD_ALLOW_AUTH_REQUIRE_NEW_PWD(
  971. "ldap.ad.allowAuth.requireNewPassword", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ACTIVE_DIRECTORY ),
  972. AD_ALLOW_AUTH_EXPIRED(
  973. "ldap.ad.allowAuth.expired", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ACTIVE_DIRECTORY ),
  974. AD_ENFORCE_PW_HISTORY_ON_SET(
  975. "ldap.ad.enforcePwHistoryOnSet", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ACTIVE_DIRECTORY ),
  976. // active directory
  977. ORACLE_DS_ENABLE_MANIP_ALLOWCHANGETIME(
  978. "ldap.oracleDS.enable.manipAllowChangeTime", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ORACLE_DS ),
  979. ORACLE_DS_ALLOW_AUTH_REQUIRE_NEW_PWD(
  980. "ldap.oracleDS.allowAuth.requireNewPassword", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ORACLE_DS ),
  981. // helpdesk profile
  982. HELPDESK_ENABLE(
  983. "helpdesk.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.HELPDESK_SETTINGS ),
  984. HELPDESK_PROFILE_LIST(
  985. "helpdesk.profile.list", PwmSettingSyntax.PROFILE, PwmSettingCategory.INTERNAL ),
  986. HELPDESK_PROFILE_QUERY_MATCH(
  987. "helpdesk.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.HELPDESK_BASE ),
  988. HELPDESK_SEARCH_FORM(
  989. "helpdesk.search.form", PwmSettingSyntax.FORM, PwmSettingCategory.HELPDESK_BASE ),
  990. HELPDESK_SEARCH_RESULT_FORM(
  991. "helpdesk.result.form", PwmSettingSyntax.FORM, PwmSettingCategory.HELPDESK_BASE ),
  992. HELPDESK_SEARCH_FILTERS(
  993. "helpdesk.search.filters", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.HELPDESK_BASE ),
  994. HELPDESK_SEARCH_FILTER(
  995. "helpdesk.filter", PwmSettingSyntax.STRING, PwmSettingCategory.HELPDESK_BASE ),
  996. HELPDESK_SEARCH_BASE(
  997. "helpdesk.searchBase", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.HELPDESK_BASE ),
  998. HELPDESK_DETAIL_FORM(
  999. "helpdesk.detail.form", PwmSettingSyntax.FORM, PwmSettingCategory.HELPDESK_BASE ),
  1000. HELPDESK_RESULT_LIMIT(
  1001. "helpdesk.result.limit", PwmSettingSyntax.NUMERIC, PwmSettingCategory.HELPDESK_BASE ),
  1002. HELPDESK_SEND_PASSWORD(
  1003. "helpdesk.sendPassword", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.HELPDESK_BASE ),
  1004. HELPDESK_POST_SET_PASSWORD_WRITE_ATTRIBUTES(
  1005. "helpdesk.setPassword.writeAttributes", PwmSettingSyntax.ACTION, PwmSettingCategory.HELPDESK_BASE ),
  1006. HELPDESK_ACTIONS(
  1007. "helpdesk.actions", PwmSettingSyntax.ACTION, PwmSettingCategory.HELPDESK_BASE ),
  1008. HELPDESK_IDLE_TIMEOUT_SECONDS(
  1009. "helpdesk.idleTimeout", PwmSettingSyntax.DURATION, PwmSettingCategory.HELPDESK_BASE ),
  1010. HELPDESK_ENFORCE_PASSWORD_POLICY(
  1011. "helpdesk.enforcePasswordPolicy", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.HELPDESK_BASE ),
  1012. HELPDESK_CLEAR_RESPONSES(
  1013. "helpdesk.clearResponses", PwmSettingSyntax.SELECT, PwmSettingCategory.HELPDESK_BASE ),
  1014. HELPDESK_FORCE_PW_EXPIRATION(
  1015. "helpdesk.forcePwExpiration", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.HELPDESK_BASE ),
  1016. HELPDESK_USE_PROXY(
  1017. "helpdesk.useProxy", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.HELPDESK_BASE ),
  1018. HELPDESK_DISPLAY_NAMES_CARD_LABELS(
  1019. "helpdesk.displayName.cardLabels", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.HELPDESK_BASE ),
  1020. HELPDESK_TOKEN_SEND_METHOD(
  1021. "helpdesk.token.sendMethod", PwmSettingSyntax.SELECT, PwmSettingCategory.HELPDESK_BASE ),
  1022. HELPDESK_VIEW_STATUS_VALUES(
  1023. "helpdesk.viewStatusValues", PwmSettingSyntax.OPTIONLIST, PwmSettingCategory.HELPDESK_OPTIONS ),
  1024. HELPDESK_SET_PASSWORD_MODE(
  1025. "helpdesk.setPassword.mode", PwmSettingSyntax.SELECT, PwmSettingCategory.HELPDESK_OPTIONS ),
  1026. HELPDESK_ENABLE_UNLOCK(
  1027. "helpdesk.enableUnlock", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.HELPDESK_OPTIONS ),
  1028. HELPDESK_CLEAR_RESPONSES_BUTTON(
  1029. "helpdesk.clearResponses.button", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.HELPDESK_OPTIONS ),
  1030. HELPDESK_CLEAR_OTP_BUTTON(
  1031. "helpdesk.clearOtp.button", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.HELPDESK_OPTIONS ),
  1032. HELPDESK_DELETE_USER_BUTTON(
  1033. "helpdesk.deleteUser.button", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.HELPDESK_OPTIONS ),
  1034. HELPDESK_PASSWORD_MASKVALUE(
  1035. "helpdesk.setPassword.maskValue", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.HELPDESK_OPTIONS ),
  1036. HELPDESK_ENABLE_PHOTOS(
  1037. "helpdesk.enablePhotos", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.HELPDESK_OPTIONS ),
  1038. HELPDESK_ENABLE_ADVANCED_SEARCH(
  1039. "helpdesk.advancedSearch.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.HELPDESK_OPTIONS ),
  1040. HELPDESK_VERIFICATION_METHODS(
  1041. "helpdesk.verificationMethods", PwmSettingSyntax.VERIFICATION_METHOD, PwmSettingCategory.HELPDESK_VERIFICATION ),
  1042. HELPDESK_VERIFICATION_FORM(
  1043. "helpdesk.verification.form", PwmSettingSyntax.FORM, PwmSettingCategory.HELPDESK_VERIFICATION ),
  1044. // Database
  1045. DATABASE_JDBC_DRIVER(
  1046. "db.jdbc.driver", PwmSettingSyntax.FILE, PwmSettingCategory.DATABASE_SETTINGS ),
  1047. DATABASE_CLASS(
  1048. "db.classname", PwmSettingSyntax.STRING, PwmSettingCategory.DATABASE_SETTINGS ),
  1049. DATABASE_URL(
  1050. "db.url", PwmSettingSyntax.STRING, PwmSettingCategory.DATABASE_SETTINGS ),
  1051. DATABASE_USERNAME(
  1052. "db.username", PwmSettingSyntax.STRING, PwmSettingCategory.DATABASE_SETTINGS ),
  1053. DATABASE_PASSWORD(
  1054. "db.password", PwmSettingSyntax.PASSWORD, PwmSettingCategory.DATABASE_SETTINGS ),
  1055. DB_VENDOR_TEMPLATE(
  1056. "db.vendor.template", PwmSettingSyntax.SELECT, PwmSettingCategory.DATABASE_SETTINGS ),
  1057. // Database advanced
  1058. DATABASE_COLUMN_TYPE_KEY(
  1059. "db.columnType.key", PwmSettingSyntax.STRING, PwmSettingCategory.DATABASE_ADV ),
  1060. DATABASE_COLUMN_TYPE_VALUE(
  1061. "db.columnType.value", PwmSettingSyntax.STRING, PwmSettingCategory.DATABASE_ADV ),
  1062. DATABASE_DEBUG_TRACE(
  1063. "db.debugTrace.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.DATABASE_ADV ),
  1064. // pw expiry notice
  1065. PW_EXPY_NOTIFY_ENABLE(
  1066. "pwNotify.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PW_EXP_NOTIFY ),
  1067. PW_EXPY_NOTIFY_STORAGE_MODE(
  1068. "pwNotify.storageMode", PwmSettingSyntax.SELECT, PwmSettingCategory.PW_EXP_NOTIFY ),
  1069. PW_EXPY_NOTIFY_PERMISSION(
  1070. "pwNotify.queryString", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.PW_EXP_NOTIFY ),
  1071. PW_EXPY_NOTIFY_INTERVAL(
  1072. "pwNotify.intervals", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.PW_EXP_NOTIFY ),
  1073. PW_EXPY_NOTIFY_JOB_OFFSET(
  1074. "pwNotify.job.offSet", PwmSettingSyntax.DURATION, PwmSettingCategory.PW_EXP_NOTIFY ),
  1075. // reporting
  1076. REPORTING_ENABLE_DAILY_JOB(
  1077. "reporting.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.REPORTING ),
  1078. REPORTING_JOB_TIME_OFFSET(
  1079. "reporting.job.timeOffset", PwmSettingSyntax.DURATION, PwmSettingCategory.REPORTING ),
  1080. REPORTING_USER_MATCH(
  1081. "reporting.ldap.userMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.REPORTING ),
  1082. REPORTING_MAX_QUERY_SIZE(
  1083. "reporting.ldap.maxQuerySize", PwmSettingSyntax.NUMERIC, PwmSettingCategory.REPORTING ),
  1084. REPORTING_JOB_INTENSITY(
  1085. "reporting.job.intensity", PwmSettingSyntax.SELECT, PwmSettingCategory.REPORTING ),
  1086. REPORTING_SUMMARY_DAY_VALUES(
  1087. "reporting.summary.dayValues", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.REPORTING ),
  1088. // OAuth
  1089. OAUTH_ID_LOGIN_URL(
  1090. "oauth.idserver.loginUrl", PwmSettingSyntax.STRING, PwmSettingCategory.OAUTH ),
  1091. OAUTH_ID_SCOPE(
  1092. "oauth.idserver.scope", PwmSettingSyntax.STRING, PwmSettingCategory.OAUTH ),
  1093. OAUTH_ID_CODERESOLVE_URL(
  1094. "oauth.idserver.codeResolveUrl", PwmSettingSyntax.STRING, PwmSettingCategory.OAUTH ),
  1095. OAUTH_ID_ATTRIBUTES_URL(
  1096. "oauth.idserver.attributesUrl", PwmSettingSyntax.STRING, PwmSettingCategory.OAUTH ),
  1097. OAUTH_ID_CERTIFICATE(
  1098. "oauth.idserver.serverCerts", PwmSettingSyntax.X509CERT, PwmSettingCategory.OAUTH ),
  1099. OAUTH_ID_CLIENTNAME(
  1100. "oauth.idserver.clientName", PwmSettingSyntax.STRING, PwmSettingCategory.OAUTH ),
  1101. OAUTH_ID_SECRET(
  1102. "oauth.idserver.secret", PwmSettingSyntax.PASSWORD, PwmSettingCategory.OAUTH ),
  1103. OAUTH_ID_DN_ATTRIBUTE_NAME(
  1104. "oauth.idserver.dnAttributeName", PwmSettingSyntax.STRING, PwmSettingCategory.OAUTH ),
  1105. // CAS SSO
  1106. CAS_CLEAR_PASS_URL(
  1107. "cas.clearPassUrl", PwmSettingSyntax.STRING, PwmSettingCategory.CAS_SSO ),
  1108. CAS_CLEARPASS_KEY(
  1109. "cas.clearPass.key", PwmSettingSyntax.FILE, PwmSettingCategory.CAS_SSO ),
  1110. CAS_CLEARPASS_ALGORITHM(
  1111. "cas.clearPass.alg", PwmSettingSyntax.STRING, PwmSettingCategory.CAS_SSO ),
  1112. // http sso
  1113. SSO_AUTH_HEADER_NAME(
  1114. "security.sso.authHeaderName", PwmSettingSyntax.STRING, PwmSettingCategory.HTTP_SSO ),
  1115. // basic auth sso
  1116. BASIC_AUTH_ENABLED(
  1117. "basicAuth.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.BASIC_SSO ),
  1118. BASIC_AUTH_FORCE(
  1119. "forceBasicAuth", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.BASIC_SSO ),
  1120. // administration
  1121. QUERY_MATCH_PWM_ADMIN(
  1122. "pwmAdmin.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.ADMINISTRATION ),
  1123. ADMIN_ALLOW_SKIP_FORCED_ACTIVITIES(
  1124. "pwmAdmin.allowSkipForcedActivities", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ADMINISTRATION ),
  1125. ENABLE_EXTERNAL_WEBSERVICES(
  1126. "external.webservices.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.REST_SERVER ),
  1127. WEBSERVICES_PUBLIC_ENABLE(
  1128. "webservices.public.enable", PwmSettingSyntax.OPTIONLIST, PwmSettingCategory.REST_SERVER ),
  1129. WEBSERVICES_EXTERNAL_SECRET(
  1130. "webservices.external.secrets", PwmSettingSyntax.NAMED_SECRET, PwmSettingCategory.REST_SERVER ),
  1131. WEBSERVICES_QUERY_MATCH(
  1132. "webservices.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.REST_SERVER ),
  1133. WEBSERVICES_THIRDPARTY_QUERY_MATCH(
  1134. "webservices.thirdParty.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.REST_SERVER ),
  1135. ENABLE_WEBSERVICES_READANSWERS(
  1136. "webservices.enableReadAnswers", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.REST_SERVER ),
  1137. EXTERNAL_MACROS_DEST_TOKEN_URLS(
  1138. "external.destToken.urls", PwmSettingSyntax.STRING, PwmSettingCategory.REST_CLIENT ),
  1139. EXTERNAL_PWCHECK_REST_URLS(
  1140. "external.pwcheck.urls", PwmSettingSyntax.STRING, PwmSettingCategory.REST_CLIENT ),
  1141. EXTERNAL_MACROS_REST_URLS(
  1142. "external.macros.urls", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.REST_CLIENT ),
  1143. EXTERNAL_MACROS_REMOTE_RESPONSES_URL(
  1144. "external.remoteResponses.url", PwmSettingSyntax.STRING, PwmSettingCategory.REST_CLIENT ),
  1145. EXTERNAL_REMOTE_DATA_URL(
  1146. "external.remoteData.url", PwmSettingSyntax.REMOTE_WEB_SERVICE, PwmSettingCategory.REST_CLIENT ),
  1147. //appliance
  1148. HTTPS_CERT(
  1149. "https.server.cert", PwmSettingSyntax.PRIVATE_KEY, PwmSettingCategory.HTTPS_SERVER ),
  1150. HTTPS_PROTOCOLS(
  1151. "https.server.tls.protocols", PwmSettingSyntax.OPTIONLIST, PwmSettingCategory.HTTPS_SERVER ),
  1152. HTTPS_CIPHERS(
  1153. "https.server.tls.ciphers", PwmSettingSyntax.STRING, PwmSettingCategory.HTTPS_SERVER ),
  1154. // deprecated.
  1155. // deprecated 2019-06-01
  1156. PUBLIC_HEALTH_STATS_WEBSERVICES(
  1157. "webservices.healthStats.makePublic", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.REST_SERVER ),
  1158. // deprecated 2019-01-20
  1159. PEOPLE_SEARCH_DISPLAY_NAME(
  1160. "peopleSearch.displayName.user", PwmSettingSyntax.STRING, PwmSettingCategory.PEOPLE_SEARCH_PROFILE ),
  1161. // deprecated 2019-01-20
  1162. HELPDESK_DETAIL_DISPLAY_NAME(
  1163. "helpdesk.displayName", PwmSettingSyntax.STRING, PwmSettingCategory.HELPDESK_BASE ),
  1164. // deprecated 2018-12-05
  1165. REPORTING_SEARCH_FILTER(
  1166. "reporting.ldap.searchFilter", PwmSettingSyntax.STRING, PwmSettingCategory.REPORTING ),
  1167. // deprecated 2018-10-15
  1168. PEOPLE_SEARCH_SEARCH_ATTRIBUTES(
  1169. "peopleSearch.searchAttributes", PwmSettingSyntax.STRING_ARRAY, PwmSettingCategory.PEOPLE_SEARCH ),
  1170. // deprecated 2018-02-27
  1171. RECOVERY_ENFORCE_MINIMUM_PASSWORD_LIFETIME(
  1172. "challenge.enforceMinimumPasswordLifetime", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.RECOVERY_OPTIONS ),
  1173. UPDATE_PROFILE_CHECK_QUERY_MATCH(
  1174. "updateAttributes.check.queryMatch", PwmSettingSyntax.USER_PERMISSION, PwmSettingCategory.UPDATE_PROFILE ),
  1175. PASSWORD_POLICY_AD_COMPLEXITY(
  1176. "password.policy.ADComplexity", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.PASSWORD_POLICY ),
  1177. CHALLENGE_REQUIRE_RESPONSES(
  1178. "challenge.requireResponses", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.RECOVERY_SETTINGS ),
  1179. FORGOTTEN_PASSWORD_REQUIRE_OTP(
  1180. "recovery.require.otp", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.RECOVERY_SETTINGS ),
  1181. HELPDESK_ENABLE_OTP_VERIFY(
  1182. "helpdesk.otp.verify", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.HELPDESK_BASE ),;
  1183. private static final PwmLogger LOGGER = PwmLogger.forClass( PwmSetting.class );
  1184. private final String key;
  1185. private final PwmSettingSyntax syntax;
  1186. private final PwmSettingCategory category;
  1187. // cached values read from XML file
  1188. private final Supplier<List<TemplateSetReference<StoredValue>>> defaultValues = new LazySupplier<>( () -> PwmSettingReader.readDefaultValue( PwmSetting.this ) );
  1189. private final Supplier<List<TemplateSetReference<String>>> examples = new LazySupplier<>( () -> PwmSettingReader.readExamples( PwmSetting.this ) );
  1190. private final Supplier<Map<String, String>> options = new LazySupplier<>( () -> PwmSettingReader.readOptions( PwmSetting.this ) );
  1191. private final Supplier<Collection<PwmSettingFlag>> flags = new LazySupplier<>( () -> PwmSettingReader.readFlags( PwmSetting.this ) );
  1192. private final Supplier<Map<PwmSettingProperty, String>> properties = new LazySupplier<>( () -> PwmSettingReader.readProperties( PwmSetting.this ) );
  1193. private final Supplier<Collection<LDAPPermissionInfo>> ldapPermissionInfo = new LazySupplier<>( () -> PwmSettingReader.readLdapPermissionInfo( PwmSetting.this ) );
  1194. private final Supplier<Boolean> required = new LazySupplier<>( () -> PwmSettingReader.readRequired( PwmSetting.this ) );
  1195. private final Supplier<Boolean> hidden = new LazySupplier<>( () -> PwmSettingReader.readHidden( PwmSetting.this ) );
  1196. private final Supplier<Integer> level = new LazySupplier<>( () -> PwmSettingReader.readLevel( PwmSetting.this ) );
  1197. private final Supplier<Pattern> pattern = new LazySupplier<>( () -> PwmSettingReader.readPattern( PwmSetting.this ) );
  1198. private final Supplier<Pattern> defaultLocaleLabel = new LazySupplier<>( () -> PwmSettingReader.readPattern( PwmSetting.this ) );
  1199. PwmSetting(
  1200. final String key,
  1201. final PwmSettingSyntax syntax,
  1202. final PwmSettingCategory category
  1203. )
  1204. {
  1205. this.key = key;
  1206. this.syntax = syntax;
  1207. this.category = category;
  1208. }
  1209. public String getKey( )
  1210. {
  1211. return key;
  1212. }
  1213. public boolean isConfidential( )
  1214. {
  1215. return PwmSettingSyntax.PASSWORD == this.getSyntax();
  1216. }
  1217. public PwmSettingCategory getCategory( )
  1218. {
  1219. return category;
  1220. }
  1221. public PwmSettingSyntax getSyntax( )
  1222. {
  1223. return syntax;
  1224. }
  1225. private List<TemplateSetReference<StoredValue>> getDefaultValue()
  1226. {
  1227. return defaultValues.get();
  1228. }
  1229. public StoredValue getDefaultValue( final PwmSettingTemplateSet templateSet )
  1230. {
  1231. final List<TemplateSetReference<StoredValue>> defaultValues = getDefaultValue();
  1232. return TemplateSetReference.referenceForTempleSet( defaultValues, templateSet );
  1233. }
  1234. public Map<String, String> getDefaultValueDebugStrings( final Locale locale )
  1235. {
  1236. final Map<String, String> returnObj = new LinkedHashMap<>();
  1237. for ( final TemplateSetReference<StoredValue> templateSetReference : this.getDefaultValue() )
  1238. {
  1239. returnObj.put(
  1240. StringUtil.join( templateSetReference.getSettingTemplates(), "," ),
  1241. ( templateSetReference.getReference() ).toDebugString( locale )
  1242. );
  1243. }
  1244. return Collections.unmodifiableMap( returnObj );
  1245. }
  1246. public Map<PwmSettingProperty, String> getProperties( )
  1247. {
  1248. return properties.get();
  1249. }
  1250. public Collection<PwmSettingFlag> getFlags( )
  1251. {
  1252. return flags.get();
  1253. }
  1254. public Map<String, String> getOptions()
  1255. {
  1256. return options.get();
  1257. }
  1258. public String getLabel( final Locale locale )
  1259. {
  1260. final String propertyKey = password.pwm.i18n.PwmSetting.SETTING_LABEL_PREFIX + this.getKey();
  1261. return LocaleHelper.getLocalizedMessage( locale, propertyKey, null, password.pwm.i18n.PwmSetting.class );
  1262. }
  1263. public String getDescription( final Locale locale )
  1264. {
  1265. final String propertyKey = password.pwm.i18n.PwmSetting.SETTING_DESCRIPTION_PREFIX + this.getKey();
  1266. final String storedText = LocaleHelper.getLocalizedMessage( locale, propertyKey, null, password.pwm.i18n.PwmSetting.class );
  1267. final MacroMachine macroMachine = MacroMachine.forStatic();
  1268. return macroMachine.expandMacros( storedText );
  1269. }
  1270. public String getExample( final PwmSettingTemplateSet template )
  1271. {
  1272. return TemplateSetReference.referenceForTempleSet( examples.get(), template );
  1273. }
  1274. public boolean isRequired( )
  1275. {
  1276. return required.get();
  1277. }
  1278. public boolean isHidden( )
  1279. {
  1280. return hidden.get();
  1281. }
  1282. public int getLevel( )
  1283. {
  1284. return level.get();
  1285. }
  1286. public Pattern getRegExPattern( )
  1287. {
  1288. return pattern.get();
  1289. }
  1290. public static Optional<PwmSetting> forKey( final String key )
  1291. {
  1292. return Arrays.stream( values() )
  1293. .filter( loopValue -> loopValue.getKey().equals( key ) )
  1294. .findFirst();
  1295. }
  1296. public String toMenuLocationDebug(
  1297. final String profileID,
  1298. final Locale locale
  1299. )
  1300. {
  1301. final String separator = LocaleHelper.getLocalizedMessage( locale, Config.Display_SettingNavigationSeparator, null );
  1302. return this.getCategory().toMenuLocationDebug( profileID, locale ) + separator + this.getLabel( locale );
  1303. }
  1304. public Collection<LDAPPermissionInfo> getLDAPPermissionInfo()
  1305. {
  1306. return ldapPermissionInfo.get();
  1307. }
  1308. public enum SettingStat
  1309. {
  1310. Total,
  1311. hasProfile,
  1312. syntaxCounts,
  1313. }
  1314. public static Map<SettingStat, Object> getStats( )
  1315. {
  1316. final Map<SettingStat, Object> returnObj = new LinkedHashMap<>();
  1317. {
  1318. returnObj.put( SettingStat.Total, password.pwm.config.PwmSetting.values().length );
  1319. }
  1320. {
  1321. int hasProfile = 0;
  1322. for ( final PwmSetting pwmSetting : values() )
  1323. {
  1324. if ( pwmSetting.getCategory().hasProfiles() )
  1325. {
  1326. hasProfile++;
  1327. }
  1328. }
  1329. returnObj.put( SettingStat.hasProfile, hasProfile );
  1330. }
  1331. {
  1332. final Map<PwmSettingSyntax, Integer> syntaxCounts = new LinkedHashMap<>();
  1333. for ( final PwmSettingSyntax syntax : PwmSettingSyntax.values() )
  1334. {
  1335. syntaxCounts.put( syntax, 0 );
  1336. }
  1337. for ( final PwmSetting pwmSetting : values() )
  1338. {
  1339. syntaxCounts.put( pwmSetting.getSyntax(), syntaxCounts.get( pwmSetting.getSyntax() ) + 1 );
  1340. }
  1341. returnObj.put( SettingStat.syntaxCounts, syntaxCounts );
  1342. }
  1343. return returnObj;
  1344. }
  1345. @Value
  1346. static class TemplateSetReference<T>
  1347. {
  1348. private final T reference;
  1349. private final Set<PwmSettingTemplate> settingTemplates;
  1350. private static <T> T referenceForTempleSet(
  1351. final List<TemplateSetReference<T>> templateSetReferences,
  1352. final PwmSettingTemplateSet pwmSettingTemplate
  1353. )
  1354. {
  1355. if ( templateSetReferences == null || templateSetReferences.isEmpty() )
  1356. {
  1357. throw new IllegalStateException( "templateSetReferences can not be null" );
  1358. }
  1359. if ( templateSetReferences.size() == 1 )
  1360. {
  1361. return templateSetReferences.iterator().next().getReference();
  1362. }
  1363. for ( int matchCountExamSize = templateSetReferences.size(); matchCountExamSize > 0; matchCountExamSize-- )
  1364. {
  1365. for ( final TemplateSetReference<T> templateSetReference : templateSetReferences )
  1366. {
  1367. final Set<PwmSettingTemplate> temporarySet = JavaHelper.copiedEnumSet( templateSetReference.getSettingTemplates(), PwmSettingTemplate.class );
  1368. temporarySet.retainAll( pwmSettingTemplate.getTemplates() );
  1369. final int matchCount = temporarySet.size();
  1370. if ( matchCount == matchCountExamSize )
  1371. {
  1372. return templateSetReference.getReference();
  1373. }
  1374. }
  1375. }
  1376. return templateSetReferences.iterator().next().getReference();
  1377. }
  1378. }
  1379. public static Set<PwmSetting> sortedByMenuLocation( final Locale locale )
  1380. {
  1381. final TreeMap<String, PwmSetting> treeMap = new TreeMap<>();
  1382. for ( final PwmSetting pwmSetting : PwmSetting.values() )
  1383. {
  1384. treeMap.put( pwmSetting.toMenuLocationDebug( null, locale ), pwmSetting );
  1385. }
  1386. return Collections.unmodifiableSet( new LinkedHashSet<>( treeMap.values() ) );
  1387. }
  1388. static class PwmSettingReader
  1389. {
  1390. private static Collection<PwmSettingFlag> readFlags( final PwmSetting pwmSetting )
  1391. {
  1392. final Collection<PwmSettingFlag> returnObj = EnumSet.noneOf( PwmSettingFlag.class );
  1393. final XmlElement settingElement = PwmSettingXml.readSettingXml( pwmSetting );
  1394. final List<XmlElement> flagElements = settingElement.getChildren( "flag" );
  1395. for ( final XmlElement flagElement : flagElements )
  1396. {
  1397. final String value = flagElement.getTextTrim();
  1398. try
  1399. {
  1400. final PwmSettingFlag flag = PwmSettingFlag.valueOf( value );
  1401. returnObj.add( flag );
  1402. }
  1403. catch ( final IllegalArgumentException e )
  1404. {
  1405. LOGGER.error( () -> "unknown flag for setting " + pwmSetting.getKey() + ", error: unknown flag value: " + value );
  1406. }
  1407. }
  1408. return Collections.unmodifiableCollection( returnObj );
  1409. }
  1410. private static Map<String, String> readOptions( final PwmSetting pwmSetting )
  1411. {
  1412. final Map<String, String> returnList = new LinkedHashMap<>();
  1413. final XmlElement settingElement = PwmSettingXml.readSettingXml( pwmSetting );
  1414. final Optional<XmlElement> optionsElement = settingElement.getChild( PwmSettingXml.XML_ELEMENT_OPTIONS );
  1415. if ( optionsElement.isPresent() )
  1416. {
  1417. final List<XmlElement> optionElements = optionsElement.get().getChildren( PwmSettingXml.XML_ELEMENT_OPTION );
  1418. if ( optionElements != null )
  1419. {
  1420. for ( final XmlElement optionElement : optionElements )
  1421. {
  1422. if ( optionElement.getAttributeValue( PwmSettingXml.XML_ELEMENT_VALUE ) == null )
  1423. {
  1424. throw new IllegalStateException( "option element is missing 'value' attribute for key " + pwmSetting.getKey() );
  1425. }
  1426. returnList.put( optionElement.getAttributeValue( PwmSettingXml.XML_ELEMENT_VALUE ), optionElement.getText() );
  1427. }
  1428. }
  1429. }
  1430. final Map<String, String> finalList = Collections.unmodifiableMap( returnList );
  1431. return Collections.unmodifiableMap( finalList );
  1432. }
  1433. private static Collection<LDAPPermissionInfo> readLdapPermissionInfo( final PwmSetting pwmSetting )
  1434. {
  1435. final XmlElement settingElement = PwmSettingXml.readSettingXml( pwmSetting );
  1436. final List<XmlElement> permissionElements = settingElement.getChildren( PwmSettingXml.XML_ELEMENT_LDAP_PERMISSION );
  1437. final List<LDAPPermissionInfo> returnObj = new ArrayList<>();
  1438. if ( permissionElements != null )
  1439. {
  1440. for ( final XmlElement permissionElement : permissionElements )
  1441. {
  1442. final Optional<LDAPPermissionInfo.Actor> actor = JavaHelper.readEnumFromString(
  1443. LDAPPermissionInfo.Actor.class,
  1444. permissionElement.getAttributeValue( PwmSettingXml.XML_ATTRIBUTE_PERMISSION_ACTOR )
  1445. );
  1446. final Optional<LDAPPermissionInfo.Access> type = JavaHelper.readEnumFromString(
  1447. LDAPPermissionInfo.Access.class,
  1448. permissionElement.getAttributeValue( PwmSettingXml.XML_ATTRIBUTE_PERMISSION_ACCESS )
  1449. );
  1450. if ( actor.isPresent() && type.isPresent() )
  1451. {
  1452. final LDAPPermissionInfo permissionInfo = new LDAPPermissionInfo( type.get(), actor.get() );
  1453. returnObj.add( permissionInfo );
  1454. }
  1455. }
  1456. }
  1457. return Collections.unmodifiableList( returnObj );
  1458. }
  1459. private static List<TemplateSetReference<String>> readExamples( final PwmSetting pwmSetting )
  1460. {
  1461. final List<TemplateSetReference<String>> returnObj = new ArrayList<>();
  1462. final MacroMachine macroMachine = MacroMachine.forStatic();
  1463. final XmlElement settingElement = PwmSettingXml.readSettingXml( pwmSetting );
  1464. final List<XmlElement> exampleElements = settingElement.getChildren( PwmSettingXml.XML_ELEMENT_EXAMPLE );
  1465. for ( final XmlElement exampleElement : exampleElements )
  1466. {
  1467. final Set<PwmSettingTemplate> definedTemplates = PwmSettingXml.parseTemplateAttribute( exampleElement );
  1468. final String exampleString = macroMachine.expandMacros( exampleElement.getText() );
  1469. returnObj.add( new TemplateSetReference<>( exampleString, Collections.unmodifiableSet( definedTemplates ) ) );
  1470. }
  1471. if ( returnObj.isEmpty() )
  1472. {
  1473. returnObj.add( new TemplateSetReference<>( "", Collections.emptySet() ) );
  1474. }
  1475. return Collections.unmodifiableList( returnObj );
  1476. }
  1477. private static Map<PwmSettingProperty, String> readProperties( final PwmSetting pwmSetting )
  1478. {
  1479. final Map<PwmSettingProperty, String> newProps = new EnumMap<>( PwmSettingProperty.class );
  1480. final XmlElement settingElement = PwmSettingXml.readSettingXml( pwmSetting );
  1481. final Optional<XmlElement> propertiesElement = settingElement.getChild( PwmSettingXml.XML_ELEMENT_PROPERTIES );
  1482. if ( propertiesElement.isPresent() )
  1483. {
  1484. final List<XmlElement> propertyElements = propertiesElement.get().getChildren( PwmSettingXml.XML_ELEMENT_PROPERTY );
  1485. if ( propertyElements != null )
  1486. {
  1487. for ( final XmlElement propertyElement : propertyElements )
  1488. {
  1489. if ( propertyElement.getAttributeValue( PwmSettingXml.XML_ATTRIBUTE_KEY ) == null )
  1490. {
  1491. throw new IllegalStateException( "property element is missing 'key' attribute for value " + pwmSetting.getKey() );
  1492. }
  1493. final PwmSettingProperty property = JavaHelper.readEnumFromString(
  1494. PwmSettingProperty.class,
  1495. null,
  1496. propertyElement.getAttributeValue( PwmSettingXml.XML_ATTRIBUTE_KEY ) );
  1497. if ( property == null )
  1498. {
  1499. throw new IllegalStateException( "property element has unknown 'key' attribute for value " + pwmSetting.getKey() );
  1500. }
  1501. newProps.put( property, propertyElement.getText() );
  1502. }
  1503. }
  1504. }
  1505. return Collections.unmodifiableMap( newProps );
  1506. }
  1507. private static List<TemplateSetReference<StoredValue>> readDefaultValue( final PwmSetting pwmSetting )
  1508. {
  1509. final List<TemplateSetReference<StoredValue>> returnObj = new ArrayList<>();
  1510. final XmlElement settingElement = PwmSettingXml.readSettingXml( pwmSetting );
  1511. final List<XmlElement> defaultElements = settingElement.getChildren( PwmSettingXml.XML_ELEMENT_DEFAULT );
  1512. if ( pwmSetting.getSyntax() == PwmSettingSyntax.PASSWORD )
  1513. {
  1514. returnObj.add( new TemplateSetReference<>( new PasswordValue( null ), Collections.emptySet() ) );
  1515. }
  1516. else
  1517. {
  1518. for ( final XmlElement defaultElement : defaultElements )
  1519. {
  1520. final Set<PwmSettingTemplate> definedTemplates = PwmSettingXml.parseTemplateAttribute( defaultElement );
  1521. final StoredValue storedValue = ValueFactory.fromXmlValues( pwmSetting, defaultElement, null );
  1522. returnObj.add( new TemplateSetReference<>( storedValue, definedTemplates ) );
  1523. }
  1524. }
  1525. if ( returnObj.isEmpty() )
  1526. {
  1527. throw new IllegalStateException( "no default value for setting " + pwmSetting.getKey() );
  1528. }
  1529. return Collections.unmodifiableList( returnObj );
  1530. }
  1531. private static boolean readRequired( final PwmSetting pwmSetting )
  1532. {
  1533. final XmlElement settingElement = PwmSettingXml.readSettingXml( pwmSetting );
  1534. final String requiredAttribute = settingElement.getAttributeValue( PwmSettingXml.XML_ELEMENT_REQUIRED );
  1535. return "true".equalsIgnoreCase( requiredAttribute );
  1536. }
  1537. private static boolean readHidden( final PwmSetting pwmSetting )
  1538. {
  1539. final XmlElement settingElement = PwmSettingXml.readSettingXml( pwmSetting );
  1540. final String requiredAttribute = settingElement.getAttributeValue( PwmSettingXml.XML_ELEMENT_HIDDEN );
  1541. return "true".equalsIgnoreCase( requiredAttribute ) || pwmSetting.getCategory().isHidden();
  1542. }
  1543. private static int readLevel( final PwmSetting pwmSetting )
  1544. {
  1545. final XmlElement settingElement = PwmSettingXml.readSettingXml( pwmSetting );
  1546. final String levelAttribute = settingElement.getAttributeValue( PwmSettingXml.XML_ELEMENT_LEVEL );
  1547. return JavaHelper.silentParseInt( levelAttribute, 0 );
  1548. }
  1549. private static Pattern readPattern( final PwmSetting pwmSetting )
  1550. {
  1551. final XmlElement settingNode = PwmSettingXml.readSettingXml( pwmSetting );
  1552. final Optional<XmlElement> regexNode = settingNode.getChild( PwmSettingXml.XML_ELEMENT_REGEX );
  1553. if ( regexNode.isPresent() )
  1554. {
  1555. try
  1556. {
  1557. return Pattern.compile( regexNode.get().getText() );
  1558. }
  1559. catch ( final PatternSyntaxException e )
  1560. {
  1561. final String errorMsg = "error compiling regex constraints for setting " + pwmSetting.toString() + ", error: " + e.getMessage();
  1562. LOGGER.error( () -> errorMsg, e );
  1563. throw new IllegalStateException( errorMsg, e );
  1564. }
  1565. }
  1566. return Pattern.compile( ".*", Pattern.DOTALL );
  1567. }
  1568. private static String readLabel( final PwmSetting pwmSetting, final Locale locale )
  1569. {
  1570. final String propertyKey = password.pwm.i18n.PwmSetting.SETTING_LABEL_PREFIX + pwmSetting.getKey();
  1571. return LocaleHelper.getLocalizedMessage( locale, propertyKey, null, password.pwm.i18n.PwmSetting.class );
  1572. }
  1573. }
  1574. }