AdminContentDispositionContainer.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import { isServer } from '@growi/core/dist/utils';
  2. import { Container } from 'unstated';
  3. import { apiv3Get, apiv3Put } from '../util/apiv3-client';
  4. export default class AdminContentDispositionContainer extends Container<AdminContentDispositionContainer> {
  5. constructor(appContainer) {
  6. super();
  7. if (isServer()) {
  8. return;
  9. }
  10. this.appContainer = appContainer;
  11. this.state = {
  12. currentMode: 'strict',
  13. contentDispositionSettings: {
  14. 'text/html': 'attachment',
  15. 'image/svg+xml': 'attachment',
  16. 'application/pdf': 'attachment',
  17. 'application/json': 'attachment',
  18. 'text/csv': 'attachment',
  19. 'font/woff2': 'attachment',
  20. 'font/woff': 'attachment',
  21. 'font/ttf': 'attachment',
  22. 'font/otf': 'attachment',
  23. },
  24. };
  25. }
  26. /**
  27. * Workaround for the mangling in production build to break constructor.name
  28. */
  29. static getClassName() {
  30. return 'AdminContentDispositionContainer';
  31. }
  32. /**
  33. * retrieve markdown data
  34. */
  35. async retrieveContentDispositionSettings() {
  36. const response = await apiv3Get('/content-disposition-settings/');
  37. const { currentMode, contentDispositionSettings } = response.data;
  38. this.setState({
  39. currentMode,
  40. contentDispositionSettings
  41. });
  42. }
  43. async setStrictMode() {
  44. const response = await apiv3Put('/content-disposition-settings/strict');
  45. const { currentMode, contentDispositionSettings } = response.data;
  46. this.setState({
  47. currentMode: currentMode,
  48. contentDispositionSettings: contentDispositionSettings
  49. })
  50. return response;
  51. }
  52. async setLaxMode() {
  53. const response = await apiv3Put('/content-disposition-settings/lax');
  54. const { currentMode, contentDispositionSettings } = response.data;
  55. this.setState({
  56. currentMode: currentMode,
  57. contentDispositionSettings: contentDispositionSettings
  58. })
  59. return response;
  60. }
  61. async setHighRiskMimeType(mimeType, disposition) {
  62. // double check if valid admin
  63. const body = {
  64. [mimeType]: disposition,
  65. };
  66. const response = await apiv3Put('/content-disposition-settings/admin-override', body);
  67. const { contentDispositionSettings } = response.data;
  68. this.setState({
  69. contentDispositionSettings: contentDispositionSettings
  70. })
  71. return respone;
  72. }
  73. }