AdminLdapSecurityContainer.js 5.6 KB

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