AdminSamlSecurityContainer.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. import { Container } from 'unstated';
  2. import loggerFactory from '@alias/logger';
  3. import { pathUtils } from 'growi-commons';
  4. import urljoin from 'url-join';
  5. import removeNullPropertyFromObject from '../../../lib/util/removeNullPropertyFromObject';
  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. retrieveError: null,
  17. // TODO GW-1324 ABLCRure DB value takes precedence
  18. useOnlyEnvVars: false,
  19. callbackUrl: urljoin(pathUtils.removeTrailingSlash(appContainer.config.crowi.url), '/passport/saml/callback'),
  20. missingMandatoryConfigKeys: [],
  21. samlEntryPoint: '',
  22. samlIssuer: '',
  23. samlCert: '',
  24. samlAttrMapId: '',
  25. samlAttrMapUsername: '',
  26. samlAttrMapMail: '',
  27. samlAttrMapFirstName: '',
  28. samlAttrMapLastName: '',
  29. isSameUsernameTreatedAsIdenticalUser: false,
  30. isSameEmailTreatedAsIdenticalUser: false,
  31. samlABLCRule: '',
  32. };
  33. }
  34. /**
  35. * retrieve security data
  36. */
  37. async retrieveSecurityData() {
  38. try {
  39. const response = await this.appContainer.apiv3.get('/security-setting/');
  40. const { samlAuth } = response.data.securityParams;
  41. this.setState({
  42. missingMandatoryConfigKeys: samlAuth.missingMandatoryConfigKeys,
  43. useOnlyEnvVars: samlAuth.useOnlyEnvVarsForSomeOptions,
  44. samlEntryPoint: samlAuth.samlEntryPoint,
  45. samlIssuer: samlAuth.samlIssuer,
  46. samlCert: samlAuth.samlCert,
  47. samlAttrMapId: samlAuth.samlAttrMapId,
  48. samlAttrMapUsername: samlAuth.samlAttrMapUsername,
  49. samlAttrMapMail: samlAuth.samlAttrMapMail,
  50. samlAttrMapFirstName: samlAuth.samlAttrMapFirstName,
  51. samlAttrMapLastName: samlAuth.samlAttrMapLastName,
  52. isSameUsernameTreatedAsIdenticalUser: samlAuth.isSameUsernameTreatedAsIdenticalUser,
  53. isSameEmailTreatedAsIdenticalUser: samlAuth.isSameEmailTreatedAsIdenticalUser,
  54. samlABLCRule: samlAuth.samlABLCRule,
  55. });
  56. return samlAuth;
  57. }
  58. catch (err) {
  59. this.setState({ retrieveError: err });
  60. logger.error(err);
  61. throw new Error('Failed to fetch data');
  62. }
  63. }
  64. /**
  65. * Workaround for the mangling in production build to break constructor.name
  66. */
  67. static getClassName() {
  68. return 'AdminSamlSecurityContainer';
  69. }
  70. /**
  71. * Change samlEntryPoint
  72. */
  73. changeSamlEntryPoint(inputValue) {
  74. this.setState({ samlEntryPoint: inputValue });
  75. }
  76. /**
  77. * Change samlIssuer
  78. */
  79. changeSamlIssuer(inputValue) {
  80. this.setState({ samlIssuer: inputValue });
  81. }
  82. /**
  83. * Change samlCert
  84. */
  85. changeSamlCert(inputValue) {
  86. this.setState({ samlCert: inputValue });
  87. }
  88. /**
  89. * Change samlAttrMapId
  90. */
  91. changeSamlAttrMapId(inputValue) {
  92. this.setState({ samlAttrMapId: inputValue });
  93. }
  94. /**
  95. * Change samlAttrMapUsername
  96. */
  97. changeSamlAttrMapUserName(inputValue) {
  98. this.setState({ samlAttrMapUsername: inputValue });
  99. }
  100. /**
  101. * Change samlAttrMapMail
  102. */
  103. changeSamlAttrMapMail(inputValue) {
  104. this.setState({ samlAttrMapMail: inputValue });
  105. }
  106. /**
  107. * Change samlAttrMapFirstName
  108. */
  109. changeSamlAttrMapFirstName(inputValue) {
  110. this.setState({ samlAttrMapFirstName: inputValue });
  111. }
  112. /**
  113. * Change samlAttrMapLastName
  114. */
  115. changeSamlAttrMapLastName(inputValue) {
  116. this.setState({ samlAttrMapLastName: inputValue });
  117. }
  118. /**
  119. * Switch isSameUsernameTreatedAsIdenticalUser
  120. */
  121. switchIsSameUsernameTreatedAsIdenticalUser() {
  122. this.setState({ isSameUsernameTreatedAsIdenticalUser: !this.state.isSameUsernameTreatedAsIdenticalUser });
  123. }
  124. /**
  125. * Switch isSameEmailTreatedAsIdenticalUser
  126. */
  127. switchIsSameEmailTreatedAsIdenticalUser() {
  128. this.setState({ isSameEmailTreatedAsIdenticalUser: !this.state.isSameEmailTreatedAsIdenticalUser });
  129. }
  130. /**
  131. * Change samlABLCRule
  132. */
  133. changeSamlABLCRule(inputValue) {
  134. this.setState({ samlABLCRule: inputValue });
  135. }
  136. /**
  137. * Update saml option
  138. */
  139. async updateSamlSetting() {
  140. let requestParams = {
  141. entryPoint: this.state.samlEntryPoint,
  142. issuer: this.state.samlIssuer,
  143. cert: this.state.samlCert,
  144. attrMapId: this.state.samlAttrMapId,
  145. attrMapUsername: this.state.samlAttrMapUsername,
  146. attrMapMail: this.state.samlAttrMapMail,
  147. attrMapFirstName: this.state.samlAttrMapFirstName,
  148. attrMapLastName: this.state.samlAttrMapLastName,
  149. isSameUsernameTreatedAsIdenticalUser: this.state.isSameUsernameTreatedAsIdenticalUser,
  150. isSameEmailTreatedAsIdenticalUser: this.state.isSameEmailTreatedAsIdenticalUser,
  151. ABLCRule: this.state.samlABLCRule,
  152. };
  153. requestParams = await removeNullPropertyFromObject(requestParams);
  154. const response = await this.appContainer.apiv3.put('/security-setting/saml', requestParams);
  155. const { securitySettingParams } = response.data;
  156. this.setState({
  157. missingMandatoryConfigKeys: securitySettingParams.missingMandatoryConfigKeys,
  158. samlEntryPoint: securitySettingParams.samlEntryPoint,
  159. samlIssuer: securitySettingParams.samlIssuer,
  160. samlCert: securitySettingParams.samlCert,
  161. samlAttrMapId: securitySettingParams.samlAttrMapId,
  162. samlAttrMapUsername: securitySettingParams.samlAttrMapUsername,
  163. samlAttrMapMail: securitySettingParams.samlAttrMapMail,
  164. samlAttrMapFirstName: securitySettingParams.samlAttrMapFirstName,
  165. samlAttrMapLastName: securitySettingParams.samlAttrMapLastName,
  166. isSameUsernameTreatedAsIdenticalUser: securitySettingParams.isSameUsernameTreatedAsIdenticalUser,
  167. isSameEmailTreatedAsIdenticalUser: securitySettingParams.isSameEmailTreatedAsIdenticalUser,
  168. samlABLCRule: securitySettingParams.samlABLCRule,
  169. });
  170. return response;
  171. }
  172. }