AdminGitHubSecurityContainer.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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:AdminGitHubSecurityContainer');
  7. /**
  8. * Service container for admin security page (GitHubSecurityManagement.jsx)
  9. * @extends {Container} unstated Container
  10. */
  11. export default class AdminGitHubSecurityContainer extends Container {
  12. constructor(appContainer) {
  13. super();
  14. if (isServer()) {
  15. return;
  16. }
  17. this.dummyGithubClientId = 0;
  18. this.dummyGithubClientIdForError = 1;
  19. this.state = {
  20. retrieveError: null,
  21. // set dummy value tile for using suspense
  22. githubClientId: this.dummyGithubClientId,
  23. githubClientSecret: '',
  24. isSameUsernameTreatedAsIdenticalUser: false,
  25. };
  26. }
  27. /**
  28. * retrieve security data
  29. */
  30. async retrieveSecurityData() {
  31. try {
  32. const response = await apiv3Get('/security-setting/');
  33. const { githubOAuth } = response.data.securityParams;
  34. this.setState({
  35. githubClientId: githubOAuth.githubClientId,
  36. githubClientSecret: githubOAuth.githubClientSecret,
  37. isSameUsernameTreatedAsIdenticalUser: githubOAuth.isSameUsernameTreatedAsIdenticalUser,
  38. });
  39. }
  40. catch (err) {
  41. this.setState({ retrieveError: err });
  42. logger.error(err);
  43. throw new Error('Failed to fetch data');
  44. }
  45. }
  46. /**
  47. * Workaround for the mangling in production build to break constructor.name
  48. */
  49. static getClassName() {
  50. return 'AdminGitHubSecurityContainer';
  51. }
  52. /**
  53. * Switch isSameUsernameTreatedAsIdenticalUser
  54. */
  55. switchIsSameUsernameTreatedAsIdenticalUser() {
  56. this.setState({ isSameUsernameTreatedAsIdenticalUser: !this.state.isSameUsernameTreatedAsIdenticalUser });
  57. }
  58. /**
  59. * Update githubSetting
  60. */
  61. async updateGitHubSetting(formData) {
  62. let requestParams = formData != null ? {
  63. githubClientId: formData.githubClientId,
  64. githubClientSecret: formData.githubClientSecret,
  65. isSameUsernameTreatedAsIdenticalUser: formData.isSameUsernameTreatedAsIdenticalUser,
  66. } : {
  67. githubClientId: this.state.githubClientId,
  68. githubClientSecret: this.state.githubClientSecret,
  69. isSameUsernameTreatedAsIdenticalUser: this.state.isSameUsernameTreatedAsIdenticalUser,
  70. };
  71. requestParams = await removeNullPropertyFromObject(requestParams);
  72. const response = await apiv3Put('/security-setting/github-oauth', requestParams);
  73. const { securitySettingParams } = response.data;
  74. this.setState({
  75. githubClientId: securitySettingParams.githubClientId,
  76. githubClientSecret: securitySettingParams.githubClientSecret,
  77. isSameUsernameTreatedAsIdenticalUser: securitySettingParams.isSameUsernameTreatedAsIdenticalUser,
  78. });
  79. return response;
  80. }
  81. }