AdminSamlSecurityContainer.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import { Container } from 'unstated';
  2. import loggerFactory from '@alias/logger';
  3. import { pathUtils } from 'growi-commons';
  4. import urljoin from 'url-join';
  5. // eslint-disable-next-line no-unused-vars
  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. this.appContainer = appContainer;
  15. this.state = {
  16. useOnlyEnvVars: false,
  17. callbackUrl: urljoin(pathUtils.removeTrailingSlash(appContainer.config.crowi.url), '/passport/saml/callback'),
  18. missingMandatoryConfigKeys: [],
  19. samlEntryPoint: '',
  20. samlIssuer: '',
  21. samlCert: '',
  22. samlAttrMapId: '',
  23. samlAttrMapUserName: '',
  24. samlAttrMapMail: '',
  25. samlAttrMapFirstName: '',
  26. samlAttrMapLastName: '',
  27. isSameUsernameTreatedAsIdenticalUser: false,
  28. isSameEmailTreatedAsIdenticalUser: false,
  29. };
  30. }
  31. /**
  32. * retrieve security data
  33. */
  34. async retrieveSecurityData() {
  35. const response = await this.appContainer.apiv3.get('/security-setting/');
  36. const { samlAuth } = response.data.securityParams;
  37. this.setState({
  38. missingMandatoryConfigKeys: samlAuth.missingMandatoryConfigKeys,
  39. samlEntryPoint: samlAuth.samlEntryPoint || '',
  40. samlIssuer: samlAuth.samlIssuer || '',
  41. samlCert: samlAuth.samlCert || '',
  42. samlAttrMapId: samlAuth.samlAttrMapId || '',
  43. samlAttrMapUserName: samlAuth.samlAttrMapUserName || '',
  44. samlAttrMapMail: samlAuth.samlAttrMapMail || '',
  45. samlAttrMapFirstName: samlAuth.samlAttrMapFirstName || '',
  46. samlAttrMapLastName: samlAuth.samlAttrMapLastName || '',
  47. isSameUsernameTreatedAsIdenticalUser: samlAuth.isSameUsernameTreatedAsIdenticalUser || false,
  48. isSameEmailTreatedAsIdenticalUser: samlAuth.isSameEmailTreatedAsIdenticalUser || false,
  49. });
  50. return samlAuth;
  51. }
  52. /**
  53. * Workaround for the mangling in production build to break constructor.name
  54. */
  55. static getClassName() {
  56. return 'AdminSamlSecurityContainer';
  57. }
  58. /**
  59. * Change samlEntryPoint
  60. */
  61. changeSamlEntryPoint(inputValue) {
  62. this.setState({ samlEntryPoint: inputValue });
  63. }
  64. /**
  65. * Change samlIssuer
  66. */
  67. changeSamlIssuer(inputValue) {
  68. this.setState({ samlIssuer: inputValue });
  69. }
  70. /**
  71. * Change samlCert
  72. */
  73. changeSamlCert(inputValue) {
  74. this.setState({ samlCert: inputValue });
  75. }
  76. /**
  77. * Change samlAttrMapId
  78. */
  79. changeSamlAttrMapId(inputValue) {
  80. this.setState({ samlAttrMapId: inputValue });
  81. }
  82. /**
  83. * Change samlAttrMapUserName
  84. */
  85. changeSamlAttrMapUserName(inputValue) {
  86. this.setState({ samlAttrMapUserName: inputValue });
  87. }
  88. /**
  89. * Change samlAttrMapMail
  90. */
  91. changeSamlAttrMapMail(inputValue) {
  92. this.setState({ samlAttrMapMail: inputValue });
  93. }
  94. /**
  95. * Change samlAttrMapFirstName
  96. */
  97. changeSamlAttrMapFirstName(inputValue) {
  98. this.setState({ samlAttrMapFirstName: inputValue });
  99. }
  100. /**
  101. * Change samlAttrMapLastName
  102. */
  103. changeSamlAttrMapLastName(inputValue) {
  104. this.setState({ samlAttrMapLastName: inputValue });
  105. }
  106. /**
  107. * Switch isSameUsernameTreatedAsIdenticalUser
  108. */
  109. switchIsSameUsernameTreatedAsIdenticalUser() {
  110. this.setState({ isSameUsernameTreatedAsIdenticalUser: !this.state.isSameUsernameTreatedAsIdenticalUser });
  111. }
  112. /**
  113. * Switch isSameEmailTreatedAsIdenticalUser
  114. */
  115. switchIsSameEmailTreatedAsIdenticalUser() {
  116. this.setState({ isSameEmailTreatedAsIdenticalUser: !this.state.isSameEmailTreatedAsIdenticalUser });
  117. }
  118. /**
  119. * Update saml option
  120. */
  121. async updateSamlSetting() {
  122. const response = await this.appContainer.apiv3.put('/security-setting/saml', {
  123. samlEntryPoint: this.state.samlEntryPoint,
  124. samlIssuer: this.state.samlIssuer,
  125. samlCert: this.state.samlCert,
  126. samlAttrMapId: this.state.samlAttrMapId,
  127. samlAttrMapUserName: this.state.samlAttrMapUserName,
  128. samlAttrMapMail: this.state.samlAttrMapMail,
  129. samlAttrMapFirstName: this.state.samlAttrMapFirstName,
  130. samlAttrMapLastName: this.state.samlAttrMapLastName,
  131. isSameUsernameTreatedAsIdenticalUser: this.state.isSameUsernameTreatedAsIdenticalUser,
  132. isSameEmailTreatedAsIdenticalUser: this.state.isSameEmailTreatedAsIdenticalUser,
  133. });
  134. const { securitySettingParams } = response.data;
  135. this.setState({
  136. missingMandatoryConfigKeys: securitySettingParams.missingMandatoryConfigKeys,
  137. samlEntryPoint: securitySettingParams.samlEntryPoint || '',
  138. samlIssuer: securitySettingParams.samlIssuer || '',
  139. samlCert: securitySettingParams.samlCert || '',
  140. samlAttrMapId: securitySettingParams.samlAttrMapId || '',
  141. samlAttrMapUserName: securitySettingParams.samlAttrMapUserName || '',
  142. samlAttrMapMail: securitySettingParams.samlAttrMapMail || '',
  143. samlAttrMapFirstName: securitySettingParams.samlAttrMapFirstName || '',
  144. samlAttrMapLastName: securitySettingParams.samlAttrMapLastName || '',
  145. isSameUsernameTreatedAsIdenticalUser: securitySettingParams.isSameUsernameTreatedAsIdenticalUser || false,
  146. isSameEmailTreatedAsIdenticalUser: securitySettingParams.isSameEmailTreatedAsIdenticalUser || false,
  147. });
  148. return response;
  149. }
  150. }