AdminSamlSecurityContainer.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  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. * Change samlEntryPoint
  91. */
  92. changeSamlEntryPoint(inputValue) {
  93. this.setState({ samlEntryPoint: inputValue });
  94. }
  95. /**
  96. * Change samlIssuer
  97. */
  98. changeSamlIssuer(inputValue) {
  99. this.setState({ samlIssuer: inputValue });
  100. }
  101. /**
  102. * Change samlCert
  103. */
  104. changeSamlCert(inputValue) {
  105. this.setState({ samlCert: inputValue });
  106. }
  107. /**
  108. * Change samlAttrMapId
  109. */
  110. changeSamlAttrMapId(inputValue) {
  111. this.setState({ samlAttrMapId: inputValue });
  112. }
  113. /**
  114. * Change samlAttrMapUsername
  115. */
  116. changeSamlAttrMapUserName(inputValue) {
  117. this.setState({ samlAttrMapUsername: inputValue });
  118. }
  119. /**
  120. * Change samlAttrMapMail
  121. */
  122. changeSamlAttrMapMail(inputValue) {
  123. this.setState({ samlAttrMapMail: inputValue });
  124. }
  125. /**
  126. * Change samlAttrMapFirstName
  127. */
  128. changeSamlAttrMapFirstName(inputValue) {
  129. this.setState({ samlAttrMapFirstName: inputValue });
  130. }
  131. /**
  132. * Change samlAttrMapLastName
  133. */
  134. changeSamlAttrMapLastName(inputValue) {
  135. this.setState({ samlAttrMapLastName: inputValue });
  136. }
  137. /**
  138. * Switch isSameUsernameTreatedAsIdenticalUser
  139. */
  140. switchIsSameUsernameTreatedAsIdenticalUser() {
  141. this.setState({ isSameUsernameTreatedAsIdenticalUser: !this.state.isSameUsernameTreatedAsIdenticalUser });
  142. }
  143. /**
  144. * Switch isSameEmailTreatedAsIdenticalUser
  145. */
  146. switchIsSameEmailTreatedAsIdenticalUser() {
  147. this.setState({ isSameEmailTreatedAsIdenticalUser: !this.state.isSameEmailTreatedAsIdenticalUser });
  148. }
  149. /**
  150. * Change samlABLCRule
  151. */
  152. changeSamlABLCRule(inputValue) {
  153. this.setState({ samlABLCRule: inputValue });
  154. }
  155. /**
  156. * Update saml option
  157. */
  158. async updateSamlSetting() {
  159. let requestParams = {
  160. entryPoint: this.state.samlEntryPoint,
  161. issuer: this.state.samlIssuer,
  162. cert: this.state.samlCert,
  163. attrMapId: this.state.samlAttrMapId,
  164. attrMapUsername: this.state.samlAttrMapUsername,
  165. attrMapMail: this.state.samlAttrMapMail,
  166. attrMapFirstName: this.state.samlAttrMapFirstName,
  167. attrMapLastName: this.state.samlAttrMapLastName,
  168. isSameUsernameTreatedAsIdenticalUser: this.state.isSameUsernameTreatedAsIdenticalUser,
  169. isSameEmailTreatedAsIdenticalUser: this.state.isSameEmailTreatedAsIdenticalUser,
  170. ABLCRule: this.state.samlABLCRule,
  171. };
  172. requestParams = await removeNullPropertyFromObject(requestParams);
  173. const response = await apiv3Put('/security-setting/saml', requestParams);
  174. const { securitySettingParams } = response.data;
  175. this.setState({
  176. missingMandatoryConfigKeys: securitySettingParams.missingMandatoryConfigKeys,
  177. samlEntryPoint: securitySettingParams.samlEntryPoint,
  178. samlIssuer: securitySettingParams.samlIssuer,
  179. samlCert: securitySettingParams.samlCert,
  180. samlAttrMapId: securitySettingParams.samlAttrMapId,
  181. samlAttrMapUsername: securitySettingParams.samlAttrMapUsername,
  182. samlAttrMapMail: securitySettingParams.samlAttrMapMail,
  183. samlAttrMapFirstName: securitySettingParams.samlAttrMapFirstName,
  184. samlAttrMapLastName: securitySettingParams.samlAttrMapLastName,
  185. isSameUsernameTreatedAsIdenticalUser: securitySettingParams.isSameUsernameTreatedAsIdenticalUser,
  186. isSameEmailTreatedAsIdenticalUser: securitySettingParams.isSameEmailTreatedAsIdenticalUser,
  187. samlABLCRule: securitySettingParams.samlABLCRule,
  188. });
  189. return response;
  190. }
  191. }