AdminLdapSecurityContainer.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. import { Container } from 'unstated';
  2. import loggerFactory from '@alias/logger';
  3. import removeNullPropertyFromObject from '../../../lib/util/removeNullPropertyFromObject';
  4. const logger = loggerFactory('growi:services:AdminLdapSecurityContainer');
  5. /**
  6. * Service container for admin security page (SecurityLdapSetting.jsx)
  7. * @extends {Container} unstated Container
  8. */
  9. export default class AdminLdapSecurityContainer extends Container {
  10. constructor(appContainer) {
  11. super();
  12. this.appContainer = appContainer;
  13. this.state = {
  14. retrieveError: null,
  15. serverUrl: '',
  16. isUserBind: false,
  17. ldapBindDN: '',
  18. ldapBindDNPassword: '',
  19. ldapSearchFilter: '',
  20. ldapAttrMapUsername: '',
  21. isSameUsernameTreatedAsIdenticalUser: false,
  22. ldapAttrMapMail: '',
  23. ldapAttrMapName: '',
  24. ldapGroupSearchBase: '',
  25. ldapGroupSearchFilter: '',
  26. ldapGroupDnProperty: '',
  27. };
  28. }
  29. /**
  30. * retrieve security data
  31. */
  32. async retrieveSecurityData() {
  33. try {
  34. const response = await this.appContainer.apiv3.get('/security-setting/');
  35. const { ldapAuth } = response.data.securityParams;
  36. this.setState({
  37. serverUrl: ldapAuth.serverUrl,
  38. isUserBind: ldapAuth.isUserBind,
  39. ldapBindDN: ldapAuth.ldapBindDN,
  40. ldapBindDNPassword: ldapAuth.ldapBindDNPassword,
  41. ldapSearchFilter: ldapAuth.ldapSearchFilter,
  42. ldapAttrMapUsername: ldapAuth.ldapAttrMapUsername,
  43. isSameUsernameTreatedAsIdenticalUser: ldapAuth.isSameUsernameTreatedAsIdenticalUser,
  44. ldapAttrMapMail: ldapAuth.ldapAttrMapMail,
  45. ldapAttrMapName: ldapAuth.ldapAttrMapName,
  46. ldapGroupSearchBase: ldapAuth.ldapGroupSearchBase,
  47. ldapGroupSearchFilter: ldapAuth.ldapGroupSearchFilter,
  48. ldapGroupDnProperty: ldapAuth.ldapGroupDnProperty,
  49. });
  50. }
  51. catch (err) {
  52. this.setState({ retrieveError: err });
  53. logger.error(err);
  54. throw new Error('Failed to fetch data');
  55. }
  56. }
  57. /**
  58. * Workaround for the mangling in production build to break constructor.name
  59. */
  60. static getClassName() {
  61. return 'AdminLdapSecurityContainer';
  62. }
  63. /**
  64. * Change serverUrl
  65. */
  66. changeServerUrl(serverUrl) {
  67. this.setState({ serverUrl });
  68. }
  69. /**
  70. * Change ldapBindMode
  71. */
  72. changeLdapBindMode() {
  73. this.setState({ isUserBind: !this.state.isUserBind });
  74. }
  75. /**
  76. * Change bindDN
  77. */
  78. changeBindDN(ldapBindDN) {
  79. this.setState({ ldapBindDN });
  80. }
  81. /**
  82. * Change bindDNPassword
  83. */
  84. changeBindDNPassword(ldapBindDNPassword) {
  85. this.setState({ ldapBindDNPassword });
  86. }
  87. /**
  88. * Change ldapSearchFilter
  89. */
  90. changeSearchFilter(ldapSearchFilter) {
  91. this.setState({ ldapSearchFilter });
  92. }
  93. /**
  94. * Change ldapAttrMapUsername
  95. */
  96. changeAttrMapUsername(ldapAttrMapUsername) {
  97. this.setState({ ldapAttrMapUsername });
  98. }
  99. /**
  100. * Switch is same username treated as identical user
  101. */
  102. switchIsSameUsernameTreatedAsIdenticalUser() {
  103. this.setState({ isSameUsernameTreatedAsIdenticalUser: !this.state.isSameUsernameTreatedAsIdenticalUser });
  104. }
  105. /**
  106. * Change ldapAttrMapMail
  107. */
  108. changeAttrMapMail(ldapAttrMapMail) {
  109. this.setState({ ldapAttrMapMail });
  110. }
  111. /**
  112. * Change ldapAttrMapName
  113. */
  114. changeAttrMapName(ldapAttrMapName) {
  115. this.setState({ ldapAttrMapName });
  116. }
  117. /**
  118. * Change ldapGroupSearchBase
  119. */
  120. changeGroupSearchBase(ldapGroupSearchBase) {
  121. this.setState({ ldapGroupSearchBase });
  122. }
  123. /**
  124. * Change ldapGroupSearchFilter
  125. */
  126. changeGroupSearchFilter(ldapGroupSearchFilter) {
  127. this.setState({ ldapGroupSearchFilter });
  128. }
  129. /**
  130. * Change ldapGroupDnProperty
  131. */
  132. changeGroupDnProperty(ldapGroupDnProperty) {
  133. this.setState({ ldapGroupDnProperty });
  134. }
  135. /**
  136. * Update ldap option
  137. */
  138. async updateLdapSetting() {
  139. const {
  140. serverUrl, isUserBind, ldapBindDN, ldapBindDNPassword, ldapSearchFilter, ldapAttrMapUsername, isSameUsernameTreatedAsIdenticalUser,
  141. ldapAttrMapMail, ldapAttrMapName, ldapGroupSearchBase, ldapGroupSearchFilter, ldapGroupDnProperty,
  142. } = this.state;
  143. let requestParams = {
  144. serverUrl,
  145. isUserBind,
  146. ldapBindDN,
  147. ldapBindDNPassword,
  148. ldapSearchFilter,
  149. ldapAttrMapUsername,
  150. isSameUsernameTreatedAsIdenticalUser,
  151. ldapAttrMapMail,
  152. ldapAttrMapName,
  153. ldapGroupSearchBase,
  154. ldapGroupSearchFilter,
  155. ldapGroupDnProperty,
  156. };
  157. requestParams = await removeNullPropertyFromObject(requestParams);
  158. const response = await this.appContainer.apiv3.put('/security-setting/ldap', requestParams);
  159. const { securitySettingParams } = response.data;
  160. this.setState({
  161. serverUrl: securitySettingParams.serverUrl,
  162. isUserBind: securitySettingParams.isUserBind,
  163. ldapBindDN: securitySettingParams.ldapBindDN,
  164. ldapBindDNPassword: securitySettingParams.ldapBindDNPassword,
  165. ldapSearchFilter: securitySettingParams.ldapSearchFilter,
  166. ldapAttrMapUsername: securitySettingParams.ldapAttrMapUsername,
  167. isSameUsernameTreatedAsIdenticalUser: securitySettingParams.isSameUsernameTreatedAsIdenticalUser,
  168. ldapAttrMapMail: securitySettingParams.ldapAttrMapMail,
  169. ldapAttrMapName: securitySettingParams.ldapAttrMapName,
  170. ldapGroupSearchBase: securitySettingParams.ldapGroupSearchBase,
  171. ldapGroupSearchFilter: securitySettingParams.ldapGroupSearchFilter,
  172. ldapGroupDnProperty: securitySettingParams.ldapGroupDnProperty,
  173. });
  174. return response;
  175. }
  176. }