AdminOidcSecurityContainer.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. import { pathUtils } from '@growi/core';
  2. import { Container } from 'unstated';
  3. import urljoin from 'url-join';
  4. import loggerFactory from '~/utils/logger';
  5. import { removeNullPropertyFromObject } from '~/utils/object-utils';
  6. import { apiv3Get, apiv3Put } from '../util/apiv3-client';
  7. const logger = loggerFactory('growi:services:AdminLdapSecurityContainer');
  8. /**
  9. * Service container for admin security page (OidcSecurityManagement.jsx)
  10. * @extends {Container} unstated Container
  11. */
  12. export default class AdminOidcSecurityContainer extends Container {
  13. constructor(appContainer) {
  14. super();
  15. this.appContainer = appContainer;
  16. this.state = {
  17. retrieveError: null,
  18. oidcProviderName: '',
  19. oidcIssuerHost: '',
  20. oidcAuthorizationEndpoint: '',
  21. oidcTokenEndpoint: '',
  22. oidcRevocationEndpoint: '',
  23. oidcIntrospectionEndpoint: '',
  24. oidcUserInfoEndpoint: '',
  25. oidcEndSessionEndpoint: '',
  26. oidcRegistrationEndpoint: '',
  27. oidcJWKSUri: '',
  28. oidcClientId: '',
  29. oidcClientSecret: '',
  30. oidcAttrMapId: '',
  31. oidcAttrMapUserName: '',
  32. oidcAttrMapName: '',
  33. oidcAttrMapEmail: '',
  34. isSameUsernameTreatedAsIdenticalUser: false,
  35. isSameEmailTreatedAsIdenticalUser: false,
  36. };
  37. }
  38. /**
  39. * retrieve security data
  40. */
  41. async retrieveSecurityData() {
  42. try {
  43. const response = await apiv3Get('/security-setting/');
  44. const { oidcAuth } = response.data.securityParams;
  45. this.setState({
  46. oidcProviderName: oidcAuth.oidcProviderName,
  47. oidcIssuerHost: oidcAuth.oidcIssuerHost,
  48. oidcAuthorizationEndpoint: oidcAuth.oidcAuthorizationEndpoint,
  49. oidcTokenEndpoint: oidcAuth.oidcTokenEndpoint,
  50. oidcRevocationEndpoint: oidcAuth.oidcRevocationEndpoint,
  51. oidcIntrospectionEndpoint: oidcAuth.oidcIntrospectionEndpoint,
  52. oidcUserInfoEndpoint: oidcAuth.oidcUserInfoEndpoint,
  53. oidcEndSessionEndpoint: oidcAuth.oidcEndSessionEndpoint,
  54. oidcRegistrationEndpoint: oidcAuth.oidcRegistrationEndpoint,
  55. oidcJWKSUri: oidcAuth.oidcJWKSUri,
  56. oidcClientId: oidcAuth.oidcClientId,
  57. oidcClientSecret: oidcAuth.oidcClientSecret,
  58. oidcAttrMapId: oidcAuth.oidcAttrMapId,
  59. oidcAttrMapUserName: oidcAuth.oidcAttrMapUserName,
  60. oidcAttrMapName: oidcAuth.oidcAttrMapName,
  61. oidcAttrMapEmail: oidcAuth.oidcAttrMapEmail,
  62. isSameUsernameTreatedAsIdenticalUser: oidcAuth.isSameUsernameTreatedAsIdenticalUser,
  63. isSameEmailTreatedAsIdenticalUser: oidcAuth.isSameEmailTreatedAsIdenticalUser,
  64. });
  65. }
  66. catch (err) {
  67. this.setState({ retrieveError: err });
  68. logger.error(err);
  69. throw new Error('Failed to fetch data');
  70. }
  71. }
  72. /**
  73. * Workaround for the mangling in production build to break constructor.name
  74. */
  75. static getClassName() {
  76. return 'AdminOidcSecurityContainer';
  77. }
  78. /**
  79. * Change oidcProviderName
  80. */
  81. changeOidcProviderName(inputValue) {
  82. this.setState({ oidcProviderName: inputValue });
  83. }
  84. /**
  85. * Change oidcIssuerHost
  86. */
  87. changeOidcIssuerHost(inputValue) {
  88. this.setState({ oidcIssuerHost: inputValue });
  89. }
  90. /**
  91. * Change oidcAuthorizationEndpoint
  92. */
  93. changeOidcAuthorizationEndpoint(inputValue) {
  94. this.setState({ oidcAuthorizationEndpoint: inputValue });
  95. }
  96. /**
  97. * Change oidcTokenEndpoint
  98. */
  99. changeOidcTokenEndpoint(inputValue) {
  100. this.setState({ oidcTokenEndpoint: inputValue });
  101. }
  102. /**
  103. * Change oidcRevocationEndpoint
  104. */
  105. changeOidcRevocationEndpoint(inputValue) {
  106. this.setState({ oidcRevocationEndpoint: inputValue });
  107. }
  108. /**
  109. * Change oidcIntrospectionEndpoint
  110. */
  111. changeOidcIntrospectionEndpoint(inputValue) {
  112. this.setState({ oidcIntrospectionEndpoint: inputValue });
  113. }
  114. /**
  115. * Change oidcUserInfoEndpoint
  116. */
  117. changeOidcUserInfoEndpoint(inputValue) {
  118. this.setState({ oidcUserInfoEndpoint: inputValue });
  119. }
  120. /**
  121. * Change oidcEndSessionEndpoint
  122. */
  123. changeOidcEndSessionEndpoint(inputValue) {
  124. this.setState({ oidcEndSessionEndpoint: inputValue });
  125. }
  126. /**
  127. * Change oidcRegistrationEndpoint
  128. */
  129. changeOidcRegistrationEndpoint(inputValue) {
  130. this.setState({ oidcRegistrationEndpoint: inputValue });
  131. }
  132. /**
  133. * Change oidcJWKSUri
  134. */
  135. changeOidcJWKSUri(inputValue) {
  136. this.setState({ oidcJWKSUri: inputValue });
  137. }
  138. /**
  139. * Change oidcClientId
  140. */
  141. changeOidcClientId(inputValue) {
  142. this.setState({ oidcClientId: inputValue });
  143. }
  144. /**
  145. * Change oidcClientSecret
  146. */
  147. changeOidcClientSecret(inputValue) {
  148. this.setState({ oidcClientSecret: inputValue });
  149. }
  150. /**
  151. * Change oidcAttrMapId
  152. */
  153. changeOidcAttrMapId(inputValue) {
  154. this.setState({ oidcAttrMapId: inputValue });
  155. }
  156. /**
  157. * Change oidcAttrMapUserName
  158. */
  159. changeOidcAttrMapUserName(inputValue) {
  160. this.setState({ oidcAttrMapUserName: inputValue });
  161. }
  162. /**
  163. * Change oidcAttrMapName
  164. */
  165. changeOidcAttrMapName(inputValue) {
  166. this.setState({ oidcAttrMapName: inputValue });
  167. }
  168. /**
  169. * Change oidcAttrMapEmail
  170. */
  171. changeOidcAttrMapEmail(inputValue) {
  172. this.setState({ oidcAttrMapEmail: inputValue });
  173. }
  174. /**
  175. * Switch sameUsernameTreatedAsIdenticalUser
  176. */
  177. switchIsSameUsernameTreatedAsIdenticalUser() {
  178. this.setState({ isSameUsernameTreatedAsIdenticalUser: !this.state.isSameUsernameTreatedAsIdenticalUser });
  179. }
  180. /**
  181. * Switch sameEmailTreatedAsIdenticalUser
  182. */
  183. switchIsSameEmailTreatedAsIdenticalUser() {
  184. this.setState({ isSameEmailTreatedAsIdenticalUser: !this.state.isSameEmailTreatedAsIdenticalUser });
  185. }
  186. /**
  187. * Update OpenID Connect
  188. */
  189. async updateOidcSetting() {
  190. const {
  191. oidcProviderName,
  192. oidcIssuerHost,
  193. oidcAuthorizationEndpoint,
  194. oidcTokenEndpoint,
  195. oidcRevocationEndpoint,
  196. oidcIntrospectionEndpoint,
  197. oidcUserInfoEndpoint,
  198. oidcEndSessionEndpoint,
  199. oidcRegistrationEndpoint,
  200. oidcJWKSUri,
  201. oidcClientId,
  202. oidcClientSecret,
  203. oidcAttrMapId,
  204. oidcAttrMapUserName,
  205. oidcAttrMapName,
  206. oidcAttrMapEmail,
  207. isSameUsernameTreatedAsIdenticalUser,
  208. isSameEmailTreatedAsIdenticalUser,
  209. } = this.state;
  210. let requestParams = {
  211. oidcProviderName,
  212. oidcIssuerHost,
  213. oidcAuthorizationEndpoint,
  214. oidcTokenEndpoint,
  215. oidcRevocationEndpoint,
  216. oidcIntrospectionEndpoint,
  217. oidcUserInfoEndpoint,
  218. oidcEndSessionEndpoint,
  219. oidcRegistrationEndpoint,
  220. oidcJWKSUri,
  221. oidcClientId,
  222. oidcClientSecret,
  223. oidcAttrMapId,
  224. oidcAttrMapUserName,
  225. oidcAttrMapName,
  226. oidcAttrMapEmail,
  227. isSameUsernameTreatedAsIdenticalUser,
  228. isSameEmailTreatedAsIdenticalUser,
  229. };
  230. requestParams = await removeNullPropertyFromObject(requestParams);
  231. const response = await apiv3Put('/security-setting/oidc', requestParams);
  232. const { securitySettingParams } = response.data;
  233. this.setState({
  234. oidcProviderName: securitySettingParams.oidcProviderName,
  235. oidcIssuerHost: securitySettingParams.oidcIssuerHost,
  236. oidcAuthorizationEndpoint: securitySettingParams.oidcAuthorizationEndpoint,
  237. oidcTokenEndpoint: securitySettingParams.oidcTokenEndpoint,
  238. oidcRevocationEndpoint: securitySettingParams.oidcRevocationEndpoint,
  239. oidcIntrospectionEndpoint: securitySettingParams.oidcIntrospectionEndpoint,
  240. oidcUserInfoEndpoint: securitySettingParams.oidcUserInfoEndpoint,
  241. oidcEndSessionEndpoint: securitySettingParams.oidcEndSessionEndpoint,
  242. oidcRegistrationEndpoint: securitySettingParams.oidcRegistrationEndpoint,
  243. oidcJWKSUri: securitySettingParams.oidcJWKSUri,
  244. oidcClientId: securitySettingParams.oidcClientId,
  245. oidcClientSecret: securitySettingParams.oidcClientSecret,
  246. oidcAttrMapId: securitySettingParams.oidcAttrMapId,
  247. oidcAttrMapUserName: securitySettingParams.oidcAttrMapUserName,
  248. oidcAttrMapName: securitySettingParams.oidcAttrMapName,
  249. oidcAttrMapEmail: securitySettingParams.oidcAttrMapEmail,
  250. isSameUsernameTreatedAsIdenticalUser: securitySettingParams.isSameUsernameTreatedAsIdenticalUser,
  251. isSameEmailTreatedAsIdenticalUser: securitySettingParams.isSameEmailTreatedAsIdenticalUser,
  252. });
  253. return response;
  254. }
  255. }