AdminTwitterSecurityContainer.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import { Container } from 'unstated';
  2. import loggerFactory from '@alias/logger';
  3. import { pathUtils } from 'growi-commons';
  4. import urljoin from 'url-join';
  5. // eslint-disable-next-line no-unused-vars
  6. const logger = loggerFactory('growi:security:AdminTwitterSecurityContainer');
  7. /**
  8. * Service container for admin security page (TwitterSecurityManagement.jsx)
  9. * @extends {Container} unstated Container
  10. */
  11. export default class AdminTwitterSecurityContainer extends Container {
  12. constructor(appContainer) {
  13. super();
  14. this.appContainer = appContainer;
  15. this.state = {
  16. callbackUrl: urljoin(pathUtils.removeTrailingSlash(appContainer.config.crowi.url), '/passport/twitter/callback'),
  17. twitterConsumerKey: '',
  18. twitterConsumerSecret: '',
  19. isSameUsernameTreatedAsIdenticalUser: false,
  20. };
  21. }
  22. /**
  23. * retrieve security data
  24. */
  25. async retrieveSecurityData() {
  26. const response = await this.appContainer.apiv3.get('/security-setting/');
  27. const { twitterOAuth } = response.data.securityParams;
  28. this.setState({
  29. twitterConsumerKey: twitterOAuth.twitterConsumerKey || '',
  30. twitterConsumerSecret: twitterOAuth.twitterConsumerSecret || '',
  31. isSameUsernameTreatedAsIdenticalUser: twitterOAuth.isSameUsernameTreatedAsIdenticalUser || false,
  32. });
  33. }
  34. /**
  35. * Workaround for the mangling in production build to break constructor.name
  36. */
  37. static getClassName() {
  38. return 'AdminTwitterSecurityContainer';
  39. }
  40. /**
  41. * Change twitterConsumerKey
  42. */
  43. changeTwitterConsumerKey(value) {
  44. this.setState({ twitterConsumerKey: value });
  45. }
  46. /**
  47. * Change twitterConsumerSecret
  48. */
  49. changeTwitterConsumerSecret(value) {
  50. this.setState({ twitterConsumerSecret: value });
  51. }
  52. /**
  53. * Switch isSameUsernameTreatedAsIdenticalUser
  54. */
  55. switchIsSameUsernameTreatedAsIdenticalUser() {
  56. this.setState({ isSameUsernameTreatedAsIdenticalUser: !this.state.isSameUsernameTreatedAsIdenticalUser });
  57. }
  58. /**
  59. * Update twitterSetting
  60. */
  61. async updateTwitterSetting() {
  62. const response = await this.appContainer.apiv3.put('/security-setting/twitter-oauth', {
  63. twitterConsumerKey: this.state.twitterConsumerKey,
  64. twitterConsumerSecret: this.state.twitterConsumerSecret,
  65. isSameUsernameTreatedAsIdenticalUser: this.state.isSameUsernameTreatedAsIdenticalUser,
  66. });
  67. const { securitySettingParams } = response.data;
  68. this.setState({
  69. isTwitterStrategySetup: securitySettingParams.isTwitterStrategySetup,
  70. twitterConsumerKey: securitySettingParams.twitterConsumerKey,
  71. twitterConsumerSecret: securitySettingParams.twitterConsumerSecret,
  72. isSameUsernameTreatedAsIdenticalUser: securitySettingParams.isSameUsernameTreatedAsIdenticalUser,
  73. });
  74. return response;
  75. }
  76. }