AdminLdapSecurityContainer.js 5.4 KB

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