AdminOidcSecurityContainer.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  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:
  65. oidcAuth.isSameUsernameTreatedAsIdenticalUser,
  66. isSameEmailTreatedAsIdenticalUser:
  67. oidcAuth.isSameEmailTreatedAsIdenticalUser,
  68. });
  69. } catch (err) {
  70. this.setState({ retrieveError: err });
  71. logger.error(err);
  72. throw new Error('Failed to fetch data');
  73. }
  74. }
  75. /**
  76. * Workaround for the mangling in production build to break constructor.name
  77. */
  78. static getClassName() {
  79. return 'AdminOidcSecurityContainer';
  80. }
  81. /**
  82. * Switch sameUsernameTreatedAsIdenticalUser
  83. */
  84. switchIsSameUsernameTreatedAsIdenticalUser() {
  85. this.setState({
  86. isSameUsernameTreatedAsIdenticalUser:
  87. !this.state.isSameUsernameTreatedAsIdenticalUser,
  88. });
  89. }
  90. /**
  91. * Switch sameEmailTreatedAsIdenticalUser
  92. */
  93. switchIsSameEmailTreatedAsIdenticalUser() {
  94. this.setState({
  95. isSameEmailTreatedAsIdenticalUser:
  96. !this.state.isSameEmailTreatedAsIdenticalUser,
  97. });
  98. }
  99. /**
  100. * Update OpenID Connect
  101. */
  102. async updateOidcSetting(formData) {
  103. let requestParams =
  104. formData != null
  105. ? {
  106. oidcProviderName: formData.oidcProviderName,
  107. oidcIssuerHost: formData.oidcIssuerHost,
  108. oidcAuthorizationEndpoint: formData.oidcAuthorizationEndpoint,
  109. oidcTokenEndpoint: formData.oidcTokenEndpoint,
  110. oidcRevocationEndpoint: formData.oidcRevocationEndpoint,
  111. oidcIntrospectionEndpoint: formData.oidcIntrospectionEndpoint,
  112. oidcUserInfoEndpoint: formData.oidcUserInfoEndpoint,
  113. oidcEndSessionEndpoint: formData.oidcEndSessionEndpoint,
  114. oidcRegistrationEndpoint: formData.oidcRegistrationEndpoint,
  115. oidcJWKSUri: formData.oidcJWKSUri,
  116. oidcClientId: formData.oidcClientId,
  117. oidcClientSecret: formData.oidcClientSecret,
  118. oidcAttrMapId: formData.oidcAttrMapId,
  119. oidcAttrMapUserName: formData.oidcAttrMapUserName,
  120. oidcAttrMapName: formData.oidcAttrMapName,
  121. oidcAttrMapEmail: formData.oidcAttrMapEmail,
  122. isSameUsernameTreatedAsIdenticalUser:
  123. formData.isSameUsernameTreatedAsIdenticalUser,
  124. isSameEmailTreatedAsIdenticalUser:
  125. formData.isSameEmailTreatedAsIdenticalUser,
  126. }
  127. : {
  128. oidcProviderName: this.state.oidcProviderName,
  129. oidcIssuerHost: this.state.oidcIssuerHost,
  130. oidcAuthorizationEndpoint: this.state.oidcAuthorizationEndpoint,
  131. oidcTokenEndpoint: this.state.oidcTokenEndpoint,
  132. oidcRevocationEndpoint: this.state.oidcRevocationEndpoint,
  133. oidcIntrospectionEndpoint: this.state.oidcIntrospectionEndpoint,
  134. oidcUserInfoEndpoint: this.state.oidcUserInfoEndpoint,
  135. oidcEndSessionEndpoint: this.state.oidcEndSessionEndpoint,
  136. oidcRegistrationEndpoint: this.state.oidcRegistrationEndpoint,
  137. oidcJWKSUri: this.state.oidcJWKSUri,
  138. oidcClientId: this.state.oidcClientId,
  139. oidcClientSecret: this.state.oidcClientSecret,
  140. oidcAttrMapId: this.state.oidcAttrMapId,
  141. oidcAttrMapUserName: this.state.oidcAttrMapUserName,
  142. oidcAttrMapName: this.state.oidcAttrMapName,
  143. oidcAttrMapEmail: this.state.oidcAttrMapEmail,
  144. isSameUsernameTreatedAsIdenticalUser:
  145. this.state.isSameUsernameTreatedAsIdenticalUser,
  146. isSameEmailTreatedAsIdenticalUser:
  147. this.state.isSameEmailTreatedAsIdenticalUser,
  148. };
  149. requestParams = await removeNullPropertyFromObject(requestParams);
  150. const response = await apiv3Put('/security-setting/oidc', requestParams);
  151. const { securitySettingParams } = response.data;
  152. this.setState({
  153. oidcProviderName: securitySettingParams.oidcProviderName,
  154. oidcIssuerHost: securitySettingParams.oidcIssuerHost,
  155. oidcAuthorizationEndpoint:
  156. securitySettingParams.oidcAuthorizationEndpoint,
  157. oidcTokenEndpoint: securitySettingParams.oidcTokenEndpoint,
  158. oidcRevocationEndpoint: securitySettingParams.oidcRevocationEndpoint,
  159. oidcIntrospectionEndpoint:
  160. securitySettingParams.oidcIntrospectionEndpoint,
  161. oidcUserInfoEndpoint: securitySettingParams.oidcUserInfoEndpoint,
  162. oidcEndSessionEndpoint: securitySettingParams.oidcEndSessionEndpoint,
  163. oidcRegistrationEndpoint: securitySettingParams.oidcRegistrationEndpoint,
  164. oidcJWKSUri: securitySettingParams.oidcJWKSUri,
  165. oidcClientId: securitySettingParams.oidcClientId,
  166. oidcClientSecret: securitySettingParams.oidcClientSecret,
  167. oidcAttrMapId: securitySettingParams.oidcAttrMapId,
  168. oidcAttrMapUserName: securitySettingParams.oidcAttrMapUserName,
  169. oidcAttrMapName: securitySettingParams.oidcAttrMapName,
  170. oidcAttrMapEmail: securitySettingParams.oidcAttrMapEmail,
  171. isSameUsernameTreatedAsIdenticalUser:
  172. securitySettingParams.isSameUsernameTreatedAsIdenticalUser,
  173. isSameEmailTreatedAsIdenticalUser:
  174. securitySettingParams.isSameEmailTreatedAsIdenticalUser,
  175. });
  176. return response;
  177. }
  178. }