AdminSamlSecurityContainer.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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:security:AdminSamlSecurityContainer');
  7. /**
  8. * Service container for admin security page (SecuritySamlSetting.jsx)
  9. * @extends {Container} unstated Container
  10. */
  11. export default class AdminSamlSecurityContainer extends Container {
  12. constructor(appContainer) {
  13. super();
  14. if (isServer()) {
  15. return;
  16. }
  17. this.appContainer = appContainer;
  18. this.state = {
  19. retrieveError: null,
  20. // TODO GW-1324 ABLCRure DB value takes precedence
  21. useOnlyEnvVars: false,
  22. missingMandatoryConfigKeys: [],
  23. samlEntryPoint: '',
  24. samlIssuer: '',
  25. samlCert: '',
  26. samlAttrMapId: '',
  27. samlAttrMapUsername: '',
  28. samlAttrMapMail: '',
  29. samlAttrMapFirstName: '',
  30. samlAttrMapLastName: '',
  31. isSameUsernameTreatedAsIdenticalUser: false,
  32. isSameEmailTreatedAsIdenticalUser: false,
  33. samlABLCRule: '',
  34. envEntryPoint: '',
  35. envIssuer: '',
  36. envCert: '',
  37. envAttrMapId: '',
  38. envAttrMapUsername: '',
  39. envAttrMapMail: '',
  40. envAttrMapFirstName: '',
  41. envAttrMapLastName: '',
  42. envABLCRule: '',
  43. };
  44. }
  45. /**
  46. * retrieve security data
  47. */
  48. async retrieveSecurityData() {
  49. try {
  50. const response = await apiv3Get('/security-setting/');
  51. const { samlAuth } = response.data.securityParams;
  52. this.setState({
  53. missingMandatoryConfigKeys: samlAuth.missingMandatoryConfigKeys,
  54. useOnlyEnvVars: samlAuth.useOnlyEnvVarsForSomeOptions,
  55. samlEntryPoint: samlAuth.samlEntryPoint,
  56. samlIssuer: samlAuth.samlIssuer,
  57. samlCert: samlAuth.samlCert,
  58. samlAttrMapId: samlAuth.samlAttrMapId,
  59. samlAttrMapUsername: samlAuth.samlAttrMapUsername,
  60. samlAttrMapMail: samlAuth.samlAttrMapMail,
  61. samlAttrMapFirstName: samlAuth.samlAttrMapFirstName,
  62. samlAttrMapLastName: samlAuth.samlAttrMapLastName,
  63. isSameUsernameTreatedAsIdenticalUser: samlAuth.isSameUsernameTreatedAsIdenticalUser,
  64. isSameEmailTreatedAsIdenticalUser: samlAuth.isSameEmailTreatedAsIdenticalUser,
  65. samlABLCRule: samlAuth.samlABLCRule,
  66. envEntryPoint: samlAuth.samlEnvVarEntryPoint,
  67. envIssuer: samlAuth.samlEnvVarIssuer,
  68. envCert: samlAuth.samlEnvVarCert,
  69. envAttrMapId: samlAuth.samlEnvVarAttrMapId,
  70. envAttrMapUsername: samlAuth.samlEnvVarAttrMapUsername,
  71. envAttrMapMail: samlAuth.samlEnvVarAttrMapMail,
  72. envAttrMapFirstName: samlAuth.samlEnvVarAttrMapFirstName,
  73. envAttrMapLastName: samlAuth.samlEnvVarAttrMapLastName,
  74. envABLCRule: samlAuth.samlEnvVarABLCRule,
  75. });
  76. }
  77. catch (err) {
  78. this.setState({ retrieveError: err });
  79. logger.error(err);
  80. throw new Error('Failed to fetch data');
  81. }
  82. }
  83. /**
  84. * Workaround for the mangling in production build to break constructor.name
  85. */
  86. static getClassName() {
  87. return 'AdminSamlSecurityContainer';
  88. }
  89. /**
  90. * Switch isSameUsernameTreatedAsIdenticalUser
  91. */
  92. switchIsSameUsernameTreatedAsIdenticalUser() {
  93. this.setState({ isSameUsernameTreatedAsIdenticalUser: !this.state.isSameUsernameTreatedAsIdenticalUser });
  94. }
  95. /**
  96. * Switch isSameEmailTreatedAsIdenticalUser
  97. */
  98. switchIsSameEmailTreatedAsIdenticalUser() {
  99. this.setState({ isSameEmailTreatedAsIdenticalUser: !this.state.isSameEmailTreatedAsIdenticalUser });
  100. }
  101. /**
  102. * Update saml option
  103. */
  104. async updateSamlSetting(formData) {
  105. let requestParams = formData != null ? {
  106. entryPoint: formData.samlEntryPoint,
  107. issuer: formData.samlIssuer,
  108. cert: formData.samlCert,
  109. attrMapId: formData.samlAttrMapId,
  110. attrMapUsername: formData.samlAttrMapUsername,
  111. attrMapMail: formData.samlAttrMapMail,
  112. attrMapFirstName: formData.samlAttrMapFirstName,
  113. attrMapLastName: formData.samlAttrMapLastName,
  114. isSameUsernameTreatedAsIdenticalUser: formData.isSameUsernameTreatedAsIdenticalUser,
  115. isSameEmailTreatedAsIdenticalUser: formData.isSameEmailTreatedAsIdenticalUser,
  116. ABLCRule: formData.samlABLCRule,
  117. } : {
  118. entryPoint: this.state.samlEntryPoint,
  119. issuer: this.state.samlIssuer,
  120. cert: this.state.samlCert,
  121. attrMapId: this.state.samlAttrMapId,
  122. attrMapUsername: this.state.samlAttrMapUsername,
  123. attrMapMail: this.state.samlAttrMapMail,
  124. attrMapFirstName: this.state.samlAttrMapFirstName,
  125. attrMapLastName: this.state.samlAttrMapLastName,
  126. isSameUsernameTreatedAsIdenticalUser: this.state.isSameUsernameTreatedAsIdenticalUser,
  127. isSameEmailTreatedAsIdenticalUser: this.state.isSameEmailTreatedAsIdenticalUser,
  128. ABLCRule: this.state.samlABLCRule,
  129. };
  130. requestParams = await removeNullPropertyFromObject(requestParams);
  131. const response = await apiv3Put('/security-setting/saml', requestParams);
  132. const { securitySettingParams } = response.data;
  133. this.setState({
  134. missingMandatoryConfigKeys: securitySettingParams.missingMandatoryConfigKeys,
  135. samlEntryPoint: securitySettingParams.samlEntryPoint,
  136. samlIssuer: securitySettingParams.samlIssuer,
  137. samlCert: securitySettingParams.samlCert,
  138. samlAttrMapId: securitySettingParams.samlAttrMapId,
  139. samlAttrMapUsername: securitySettingParams.samlAttrMapUsername,
  140. samlAttrMapMail: securitySettingParams.samlAttrMapMail,
  141. samlAttrMapFirstName: securitySettingParams.samlAttrMapFirstName,
  142. samlAttrMapLastName: securitySettingParams.samlAttrMapLastName,
  143. isSameUsernameTreatedAsIdenticalUser: securitySettingParams.isSameUsernameTreatedAsIdenticalUser,
  144. isSameEmailTreatedAsIdenticalUser: securitySettingParams.isSameEmailTreatedAsIdenticalUser,
  145. samlABLCRule: securitySettingParams.samlABLCRule,
  146. });
  147. return response;
  148. }
  149. }