AdminTwitterSecurityContainer.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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:security:AdminTwitterSecurityContainer');
  8. /**
  9. * Service container for admin security page (TwitterSecurityManagement.jsx)
  10. * @extends {Container} unstated Container
  11. */
  12. export default class AdminTwitterSecurityContainer extends Container {
  13. constructor(appContainer) {
  14. super();
  15. this.appContainer = appContainer;
  16. this.dummyTwitterConsumerKey = 0;
  17. this.dummyTwitterConsumerKeyForError = 1;
  18. this.state = {
  19. // callbackUrl: urljoin(pathUtils.removeTrailingSlash(appContainer.config.crowi.url), '/passport/twitter/callback'),
  20. // set dummy value tile for using suspense
  21. twitterConsumerKey: this.dummyTwitterConsumerKey,
  22. twitterConsumerSecret: '',
  23. isSameUsernameTreatedAsIdenticalUser: false,
  24. };
  25. this.updateTwitterSetting = this.updateTwitterSetting.bind(this);
  26. }
  27. /**
  28. * retrieve security data
  29. */
  30. async retrieveSecurityData() {
  31. try {
  32. const response = await apiv3Get('/security-setting/');
  33. const { twitterOAuth } = response.data.securityParams;
  34. this.setState({
  35. twitterConsumerKey: twitterOAuth.twitterConsumerKey,
  36. twitterConsumerSecret: twitterOAuth.twitterConsumerSecret,
  37. isSameUsernameTreatedAsIdenticalUser: twitterOAuth.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 'AdminTwitterSecurityContainer';
  51. }
  52. /**
  53. * Change twitterConsumerKey
  54. */
  55. changeTwitterConsumerKey(value) {
  56. this.setState({ twitterConsumerKey: value });
  57. }
  58. /**
  59. * Change twitterConsumerSecret
  60. */
  61. changeTwitterConsumerSecret(value) {
  62. this.setState({ twitterConsumerSecret: value });
  63. }
  64. /**
  65. * Switch isSameUsernameTreatedAsIdenticalUser
  66. */
  67. switchIsSameUsernameTreatedAsIdenticalUser() {
  68. this.setState({ isSameUsernameTreatedAsIdenticalUser: !this.state.isSameUsernameTreatedAsIdenticalUser });
  69. }
  70. /**
  71. * Update twitterSetting
  72. */
  73. async updateTwitterSetting() {
  74. const { twitterConsumerKey, twitterConsumerSecret, isSameUsernameTreatedAsIdenticalUser } = this.state;
  75. let requestParams = { twitterConsumerKey, twitterConsumerSecret, isSameUsernameTreatedAsIdenticalUser };
  76. requestParams = await removeNullPropertyFromObject(requestParams);
  77. const response = await apiv3Put('/security-setting/twitter-oauth', requestParams);
  78. const { securitySettingParams } = response.data;
  79. this.setState({
  80. twitterConsumerKey: securitySettingParams.twitterConsumerKey,
  81. twitterConsumerSecret: securitySettingParams.twitterConsumerSecret,
  82. isSameUsernameTreatedAsIdenticalUser: securitySettingParams.isSameUsernameTreatedAsIdenticalUser,
  83. });
  84. return response;
  85. }
  86. }