AdminTwitterSecurityContainer.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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.state = {
  17. twitterConsumerKey: '',
  18. twitterConsumerSecret: '',
  19. isSameUsernameTreatedAsIdenticalUser: false,
  20. };
  21. this.updateTwitterSetting = this.updateTwitterSetting.bind(this);
  22. }
  23. /**
  24. * retrieve security data
  25. */
  26. async retrieveSecurityData() {
  27. try {
  28. const response = await apiv3Get('/security-setting/');
  29. const { twitterOAuth } = response.data.securityParams;
  30. this.setState({
  31. twitterConsumerKey: twitterOAuth.twitterConsumerKey,
  32. twitterConsumerSecret: twitterOAuth.twitterConsumerSecret,
  33. isSameUsernameTreatedAsIdenticalUser: twitterOAuth.isSameUsernameTreatedAsIdenticalUser,
  34. });
  35. }
  36. catch (err) {
  37. this.setState({ retrieveError: err });
  38. logger.error(err);
  39. throw new Error('Failed to fetch data');
  40. }
  41. }
  42. /**
  43. * Workaround for the mangling in production build to break constructor.name
  44. */
  45. static getClassName() {
  46. return 'AdminTwitterSecurityContainer';
  47. }
  48. /**
  49. * Change twitterConsumerKey
  50. */
  51. changeTwitterConsumerKey(value) {
  52. this.setState({ twitterConsumerKey: value });
  53. }
  54. /**
  55. * Change twitterConsumerSecret
  56. */
  57. changeTwitterConsumerSecret(value) {
  58. this.setState({ twitterConsumerSecret: value });
  59. }
  60. /**
  61. * Switch isSameUsernameTreatedAsIdenticalUser
  62. */
  63. switchIsSameUsernameTreatedAsIdenticalUser() {
  64. this.setState({ isSameUsernameTreatedAsIdenticalUser: !this.state.isSameUsernameTreatedAsIdenticalUser });
  65. }
  66. /**
  67. * Update twitterSetting
  68. */
  69. async updateTwitterSetting() {
  70. const { twitterConsumerKey, twitterConsumerSecret, isSameUsernameTreatedAsIdenticalUser } = this.state;
  71. let requestParams = { twitterConsumerKey, twitterConsumerSecret, isSameUsernameTreatedAsIdenticalUser };
  72. requestParams = await removeNullPropertyFromObject(requestParams);
  73. const response = await apiv3Put('/security-setting/twitter-oauth', requestParams);
  74. const { securitySettingParams } = response.data;
  75. this.setState({
  76. twitterConsumerKey: securitySettingParams.twitterConsumerKey,
  77. twitterConsumerSecret: securitySettingParams.twitterConsumerSecret,
  78. isSameUsernameTreatedAsIdenticalUser: securitySettingParams.isSameUsernameTreatedAsIdenticalUser,
  79. });
  80. return response;
  81. }
  82. }