AdminLdapSecurityContainer.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  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. * @param {boolean} isUserBind true: User Bind, false: Admin Bind
  77. */
  78. changeLdapBindMode(isUserBind) {
  79. this.setState({ isUserBind });
  80. }
  81. /**
  82. * Change bindDN
  83. */
  84. changeBindDN(ldapBindDN) {
  85. this.setState({ ldapBindDN });
  86. }
  87. /**
  88. * Change bindDNPassword
  89. */
  90. changeBindDNPassword(ldapBindDNPassword) {
  91. this.setState({ ldapBindDNPassword });
  92. }
  93. /**
  94. * Change ldapSearchFilter
  95. */
  96. changeSearchFilter(ldapSearchFilter) {
  97. this.setState({ ldapSearchFilter });
  98. }
  99. /**
  100. * Change ldapAttrMapUsername
  101. */
  102. changeAttrMapUsername(ldapAttrMapUsername) {
  103. this.setState({ ldapAttrMapUsername });
  104. }
  105. /**
  106. * Switch is same username treated as identical user
  107. */
  108. switchIsSameUsernameTreatedAsIdenticalUser() {
  109. this.setState({ isSameUsernameTreatedAsIdenticalUser: !this.state.isSameUsernameTreatedAsIdenticalUser });
  110. }
  111. /**
  112. * Change ldapAttrMapMail
  113. */
  114. changeAttrMapMail(ldapAttrMapMail) {
  115. this.setState({ ldapAttrMapMail });
  116. }
  117. /**
  118. * Change ldapAttrMapName
  119. */
  120. changeAttrMapName(ldapAttrMapName) {
  121. this.setState({ ldapAttrMapName });
  122. }
  123. /**
  124. * Change ldapGroupSearchBase
  125. */
  126. changeGroupSearchBase(ldapGroupSearchBase) {
  127. this.setState({ ldapGroupSearchBase });
  128. }
  129. /**
  130. * Change ldapGroupSearchFilter
  131. */
  132. changeGroupSearchFilter(ldapGroupSearchFilter) {
  133. this.setState({ ldapGroupSearchFilter });
  134. }
  135. /**
  136. * Change ldapGroupDnProperty
  137. */
  138. changeGroupDnProperty(ldapGroupDnProperty) {
  139. this.setState({ ldapGroupDnProperty });
  140. }
  141. /**
  142. * Update ldap option
  143. */
  144. async updateLdapSetting() {
  145. const {
  146. serverUrl, isUserBind, ldapBindDN, ldapBindDNPassword, ldapSearchFilter, ldapAttrMapUsername, isSameUsernameTreatedAsIdenticalUser,
  147. ldapAttrMapMail, ldapAttrMapName, ldapGroupSearchBase, ldapGroupSearchFilter, ldapGroupDnProperty,
  148. } = this.state;
  149. let requestParams = {
  150. serverUrl,
  151. isUserBind,
  152. ldapBindDN,
  153. ldapBindDNPassword,
  154. ldapSearchFilter,
  155. ldapAttrMapUsername,
  156. isSameUsernameTreatedAsIdenticalUser,
  157. ldapAttrMapMail,
  158. ldapAttrMapName,
  159. ldapGroupSearchBase,
  160. ldapGroupSearchFilter,
  161. ldapGroupDnProperty,
  162. };
  163. requestParams = await removeNullPropertyFromObject(requestParams);
  164. const response = await apiv3Put('/security-setting/ldap', requestParams);
  165. const { securitySettingParams } = response.data;
  166. this.setState({
  167. serverUrl: securitySettingParams.serverUrl,
  168. isUserBind: securitySettingParams.isUserBind,
  169. ldapBindDN: securitySettingParams.ldapBindDN,
  170. ldapBindDNPassword: securitySettingParams.ldapBindDNPassword,
  171. ldapSearchFilter: securitySettingParams.ldapSearchFilter,
  172. ldapAttrMapUsername: securitySettingParams.ldapAttrMapUsername,
  173. isSameUsernameTreatedAsIdenticalUser: securitySettingParams.isSameUsernameTreatedAsIdenticalUser,
  174. ldapAttrMapMail: securitySettingParams.ldapAttrMapMail,
  175. ldapAttrMapName: securitySettingParams.ldapAttrMapName,
  176. ldapGroupSearchBase: securitySettingParams.ldapGroupSearchBase,
  177. ldapGroupSearchFilter: securitySettingParams.ldapGroupSearchFilter,
  178. ldapGroupDnProperty: securitySettingParams.ldapGroupDnProperty,
  179. });
  180. return response;
  181. }
  182. }