AdminLdapSecurityContainer.js 5.5 KB

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