AdminSamlSecurityContainer.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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:
  64. samlAuth.isSameUsernameTreatedAsIdenticalUser,
  65. isSameEmailTreatedAsIdenticalUser:
  66. samlAuth.isSameEmailTreatedAsIdenticalUser,
  67. samlABLCRule: samlAuth.samlABLCRule,
  68. envEntryPoint: samlAuth.samlEnvVarEntryPoint,
  69. envIssuer: samlAuth.samlEnvVarIssuer,
  70. envCert: samlAuth.samlEnvVarCert,
  71. envAttrMapId: samlAuth.samlEnvVarAttrMapId,
  72. envAttrMapUsername: samlAuth.samlEnvVarAttrMapUsername,
  73. envAttrMapMail: samlAuth.samlEnvVarAttrMapMail,
  74. envAttrMapFirstName: samlAuth.samlEnvVarAttrMapFirstName,
  75. envAttrMapLastName: samlAuth.samlEnvVarAttrMapLastName,
  76. envABLCRule: samlAuth.samlEnvVarABLCRule,
  77. });
  78. } catch (err) {
  79. this.setState({ retrieveError: err });
  80. logger.error(err);
  81. throw new Error('Failed to fetch data');
  82. }
  83. }
  84. /**
  85. * Workaround for the mangling in production build to break constructor.name
  86. */
  87. static getClassName() {
  88. return 'AdminSamlSecurityContainer';
  89. }
  90. /**
  91. * Switch isSameUsernameTreatedAsIdenticalUser
  92. */
  93. switchIsSameUsernameTreatedAsIdenticalUser() {
  94. this.setState({
  95. isSameUsernameTreatedAsIdenticalUser:
  96. !this.state.isSameUsernameTreatedAsIdenticalUser,
  97. });
  98. }
  99. /**
  100. * Switch isSameEmailTreatedAsIdenticalUser
  101. */
  102. switchIsSameEmailTreatedAsIdenticalUser() {
  103. this.setState({
  104. isSameEmailTreatedAsIdenticalUser:
  105. !this.state.isSameEmailTreatedAsIdenticalUser,
  106. });
  107. }
  108. /**
  109. * Update saml option
  110. */
  111. async updateSamlSetting(formData) {
  112. let requestParams =
  113. formData != null
  114. ? {
  115. entryPoint: formData.samlEntryPoint,
  116. issuer: formData.samlIssuer,
  117. cert: formData.samlCert,
  118. attrMapId: formData.samlAttrMapId,
  119. attrMapUsername: formData.samlAttrMapUsername,
  120. attrMapMail: formData.samlAttrMapMail,
  121. attrMapFirstName: formData.samlAttrMapFirstName,
  122. attrMapLastName: formData.samlAttrMapLastName,
  123. isSameUsernameTreatedAsIdenticalUser:
  124. formData.isSameUsernameTreatedAsIdenticalUser,
  125. isSameEmailTreatedAsIdenticalUser:
  126. formData.isSameEmailTreatedAsIdenticalUser,
  127. ABLCRule: formData.samlABLCRule,
  128. }
  129. : {
  130. entryPoint: this.state.samlEntryPoint,
  131. issuer: this.state.samlIssuer,
  132. cert: this.state.samlCert,
  133. attrMapId: this.state.samlAttrMapId,
  134. attrMapUsername: this.state.samlAttrMapUsername,
  135. attrMapMail: this.state.samlAttrMapMail,
  136. attrMapFirstName: this.state.samlAttrMapFirstName,
  137. attrMapLastName: this.state.samlAttrMapLastName,
  138. isSameUsernameTreatedAsIdenticalUser:
  139. this.state.isSameUsernameTreatedAsIdenticalUser,
  140. isSameEmailTreatedAsIdenticalUser:
  141. this.state.isSameEmailTreatedAsIdenticalUser,
  142. ABLCRule: this.state.samlABLCRule,
  143. };
  144. requestParams = await removeNullPropertyFromObject(requestParams);
  145. const response = await apiv3Put('/security-setting/saml', requestParams);
  146. const { securitySettingParams } = response.data;
  147. this.setState({
  148. missingMandatoryConfigKeys:
  149. securitySettingParams.missingMandatoryConfigKeys,
  150. samlEntryPoint: securitySettingParams.samlEntryPoint,
  151. samlIssuer: securitySettingParams.samlIssuer,
  152. samlCert: securitySettingParams.samlCert,
  153. samlAttrMapId: securitySettingParams.samlAttrMapId,
  154. samlAttrMapUsername: securitySettingParams.samlAttrMapUsername,
  155. samlAttrMapMail: securitySettingParams.samlAttrMapMail,
  156. samlAttrMapFirstName: securitySettingParams.samlAttrMapFirstName,
  157. samlAttrMapLastName: securitySettingParams.samlAttrMapLastName,
  158. isSameUsernameTreatedAsIdenticalUser:
  159. securitySettingParams.isSameUsernameTreatedAsIdenticalUser,
  160. isSameEmailTreatedAsIdenticalUser:
  161. securitySettingParams.isSameEmailTreatedAsIdenticalUser,
  162. samlABLCRule: securitySettingParams.samlABLCRule,
  163. });
  164. return response;
  165. }
  166. }