AdminOidcSecurityContainer.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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:services:AdminLdapSecurityContainer');
  7. /**
  8. * Service container for admin security page (OidcSecurityManagement.jsx)
  9. * @extends {Container} unstated Container
  10. */
  11. export default class AdminOidcSecurityContainer extends Container {
  12. constructor(appContainer) {
  13. super();
  14. if (isServer()) {
  15. return;
  16. }
  17. this.appContainer = appContainer;
  18. this.state = {
  19. retrieveError: null,
  20. oidcProviderName: '',
  21. oidcIssuerHost: '',
  22. oidcAuthorizationEndpoint: '',
  23. oidcTokenEndpoint: '',
  24. oidcRevocationEndpoint: '',
  25. oidcIntrospectionEndpoint: '',
  26. oidcUserInfoEndpoint: '',
  27. oidcEndSessionEndpoint: '',
  28. oidcRegistrationEndpoint: '',
  29. oidcJWKSUri: '',
  30. oidcClientId: '',
  31. oidcClientSecret: '',
  32. oidcAttrMapId: '',
  33. oidcAttrMapUserName: '',
  34. oidcAttrMapName: '',
  35. oidcAttrMapEmail: '',
  36. isSameUsernameTreatedAsIdenticalUser: false,
  37. isSameEmailTreatedAsIdenticalUser: false,
  38. };
  39. }
  40. /**
  41. * retrieve security data
  42. */
  43. async retrieveSecurityData() {
  44. try {
  45. const response = await apiv3Get('/security-setting/');
  46. const { oidcAuth } = response.data.securityParams;
  47. this.setState({
  48. oidcProviderName: oidcAuth.oidcProviderName,
  49. oidcIssuerHost: oidcAuth.oidcIssuerHost,
  50. oidcAuthorizationEndpoint: oidcAuth.oidcAuthorizationEndpoint,
  51. oidcTokenEndpoint: oidcAuth.oidcTokenEndpoint,
  52. oidcRevocationEndpoint: oidcAuth.oidcRevocationEndpoint,
  53. oidcIntrospectionEndpoint: oidcAuth.oidcIntrospectionEndpoint,
  54. oidcUserInfoEndpoint: oidcAuth.oidcUserInfoEndpoint,
  55. oidcEndSessionEndpoint: oidcAuth.oidcEndSessionEndpoint,
  56. oidcRegistrationEndpoint: oidcAuth.oidcRegistrationEndpoint,
  57. oidcJWKSUri: oidcAuth.oidcJWKSUri,
  58. oidcClientId: oidcAuth.oidcClientId,
  59. oidcClientSecret: oidcAuth.oidcClientSecret,
  60. oidcAttrMapId: oidcAuth.oidcAttrMapId,
  61. oidcAttrMapUserName: oidcAuth.oidcAttrMapUserName,
  62. oidcAttrMapName: oidcAuth.oidcAttrMapName,
  63. oidcAttrMapEmail: oidcAuth.oidcAttrMapEmail,
  64. isSameUsernameTreatedAsIdenticalUser: oidcAuth.isSameUsernameTreatedAsIdenticalUser,
  65. isSameEmailTreatedAsIdenticalUser: oidcAuth.isSameEmailTreatedAsIdenticalUser,
  66. });
  67. }
  68. catch (err) {
  69. this.setState({ retrieveError: err });
  70. logger.error(err);
  71. throw new Error('Failed to fetch data');
  72. }
  73. }
  74. /**
  75. * Workaround for the mangling in production build to break constructor.name
  76. */
  77. static getClassName() {
  78. return 'AdminOidcSecurityContainer';
  79. }
  80. /**
  81. * Switch sameUsernameTreatedAsIdenticalUser
  82. */
  83. switchIsSameUsernameTreatedAsIdenticalUser() {
  84. this.setState({ isSameUsernameTreatedAsIdenticalUser: !this.state.isSameUsernameTreatedAsIdenticalUser });
  85. }
  86. /**
  87. * Switch sameEmailTreatedAsIdenticalUser
  88. */
  89. switchIsSameEmailTreatedAsIdenticalUser() {
  90. this.setState({ isSameEmailTreatedAsIdenticalUser: !this.state.isSameEmailTreatedAsIdenticalUser });
  91. }
  92. /**
  93. * Update OpenID Connect
  94. */
  95. async updateOidcSetting(formData) {
  96. let requestParams = formData != null ? {
  97. oidcProviderName: formData.oidcProviderName,
  98. oidcIssuerHost: formData.oidcIssuerHost,
  99. oidcAuthorizationEndpoint: formData.oidcAuthorizationEndpoint,
  100. oidcTokenEndpoint: formData.oidcTokenEndpoint,
  101. oidcRevocationEndpoint: formData.oidcRevocationEndpoint,
  102. oidcIntrospectionEndpoint: formData.oidcIntrospectionEndpoint,
  103. oidcUserInfoEndpoint: formData.oidcUserInfoEndpoint,
  104. oidcEndSessionEndpoint: formData.oidcEndSessionEndpoint,
  105. oidcRegistrationEndpoint: formData.oidcRegistrationEndpoint,
  106. oidcJWKSUri: formData.oidcJWKSUri,
  107. oidcClientId: formData.oidcClientId,
  108. oidcClientSecret: formData.oidcClientSecret,
  109. oidcAttrMapId: formData.oidcAttrMapId,
  110. oidcAttrMapUserName: formData.oidcAttrMapUserName,
  111. oidcAttrMapName: formData.oidcAttrMapName,
  112. oidcAttrMapEmail: formData.oidcAttrMapEmail,
  113. isSameUsernameTreatedAsIdenticalUser: formData.isSameUsernameTreatedAsIdenticalUser,
  114. isSameEmailTreatedAsIdenticalUser: formData.isSameEmailTreatedAsIdenticalUser,
  115. } : {
  116. oidcProviderName: this.state.oidcProviderName,
  117. oidcIssuerHost: this.state.oidcIssuerHost,
  118. oidcAuthorizationEndpoint: this.state.oidcAuthorizationEndpoint,
  119. oidcTokenEndpoint: this.state.oidcTokenEndpoint,
  120. oidcRevocationEndpoint: this.state.oidcRevocationEndpoint,
  121. oidcIntrospectionEndpoint: this.state.oidcIntrospectionEndpoint,
  122. oidcUserInfoEndpoint: this.state.oidcUserInfoEndpoint,
  123. oidcEndSessionEndpoint: this.state.oidcEndSessionEndpoint,
  124. oidcRegistrationEndpoint: this.state.oidcRegistrationEndpoint,
  125. oidcJWKSUri: this.state.oidcJWKSUri,
  126. oidcClientId: this.state.oidcClientId,
  127. oidcClientSecret: this.state.oidcClientSecret,
  128. oidcAttrMapId: this.state.oidcAttrMapId,
  129. oidcAttrMapUserName: this.state.oidcAttrMapUserName,
  130. oidcAttrMapName: this.state.oidcAttrMapName,
  131. oidcAttrMapEmail: this.state.oidcAttrMapEmail,
  132. isSameUsernameTreatedAsIdenticalUser: this.state.isSameUsernameTreatedAsIdenticalUser,
  133. isSameEmailTreatedAsIdenticalUser: this.state.isSameEmailTreatedAsIdenticalUser,
  134. };
  135. requestParams = await removeNullPropertyFromObject(requestParams);
  136. const response = await apiv3Put('/security-setting/oidc', requestParams);
  137. const { securitySettingParams } = response.data;
  138. this.setState({
  139. oidcProviderName: securitySettingParams.oidcProviderName,
  140. oidcIssuerHost: securitySettingParams.oidcIssuerHost,
  141. oidcAuthorizationEndpoint: securitySettingParams.oidcAuthorizationEndpoint,
  142. oidcTokenEndpoint: securitySettingParams.oidcTokenEndpoint,
  143. oidcRevocationEndpoint: securitySettingParams.oidcRevocationEndpoint,
  144. oidcIntrospectionEndpoint: securitySettingParams.oidcIntrospectionEndpoint,
  145. oidcUserInfoEndpoint: securitySettingParams.oidcUserInfoEndpoint,
  146. oidcEndSessionEndpoint: securitySettingParams.oidcEndSessionEndpoint,
  147. oidcRegistrationEndpoint: securitySettingParams.oidcRegistrationEndpoint,
  148. oidcJWKSUri: securitySettingParams.oidcJWKSUri,
  149. oidcClientId: securitySettingParams.oidcClientId,
  150. oidcClientSecret: securitySettingParams.oidcClientSecret,
  151. oidcAttrMapId: securitySettingParams.oidcAttrMapId,
  152. oidcAttrMapUserName: securitySettingParams.oidcAttrMapUserName,
  153. oidcAttrMapName: securitySettingParams.oidcAttrMapName,
  154. oidcAttrMapEmail: securitySettingParams.oidcAttrMapEmail,
  155. isSameUsernameTreatedAsIdenticalUser: securitySettingParams.isSameUsernameTreatedAsIdenticalUser,
  156. isSameEmailTreatedAsIdenticalUser: securitySettingParams.isSameEmailTreatedAsIdenticalUser,
  157. });
  158. return response;
  159. }
  160. }