AdminLdapSecurityContainer.js 5.6 KB

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