AdminLocalSecurityContainer.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { Container } from 'unstated';
  2. import loggerFactory from '@alias/logger';
  3. // eslint-disable-next-line no-unused-vars
  4. const logger = loggerFactory('growi:services:AdminLocalSecurityContainer');
  5. /**
  6. * Service container for admin security page (LocalSecuritySetting.jsx)
  7. * @extends {Container} unstated Container
  8. */
  9. export default class AdminLocalSecurityContainer extends Container {
  10. constructor(appContainer) {
  11. super();
  12. this.appContainer = appContainer;
  13. this.state = {
  14. retrieveError: null,
  15. registrationMode: 'Open',
  16. registrationWhiteList: [],
  17. useOnlyEnvVars: false,
  18. };
  19. }
  20. async retrieveSecurityData() {
  21. try {
  22. const response = await this.appContainer.apiv3.get('/security-setting/');
  23. const { localSetting } = response.data.securityParams;
  24. this.setState({
  25. useOnlyEnvVars: localSetting.useOnlyEnvVarsForSomeOptions,
  26. registrationMode: localSetting.registrationMode,
  27. registrationWhiteList: localSetting.registrationWhiteList,
  28. });
  29. }
  30. catch (err) {
  31. this.setState({ retrieveError: err });
  32. logger.error(err);
  33. throw new Error('Failed to fetch data');
  34. }
  35. }
  36. /**
  37. * Workaround for the mangling in production build to break constructor.name
  38. */
  39. static getClassName() {
  40. return 'AdminLocalSecurityContainer';
  41. }
  42. /**
  43. * Change registration mode
  44. */
  45. changeRegistrationMode(value) {
  46. this.setState({ registrationMode: value });
  47. }
  48. /**
  49. * Change registration white list
  50. */
  51. changeRegistrationWhiteList(value) {
  52. this.setState({ registrationWhiteList: value.split('\n') });
  53. }
  54. /**
  55. * update local security setting
  56. */
  57. async updateLocalSecuritySetting() {
  58. const { registrationWhiteList } = this.state;
  59. const response = await this.appContainer.apiv3.put('/security-setting/local-setting', {
  60. registrationMode: this.state.registrationMode,
  61. registrationWhiteList,
  62. });
  63. const { localSettingParams } = response.data;
  64. this.setState({
  65. registrationMode: localSettingParams.registrationMode,
  66. registrationWhiteList: localSettingParams.registrationWhiteList,
  67. });
  68. return localSettingParams;
  69. }
  70. }