AdminAppContainer.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. import { isServer } from '@growi/core/dist/utils';
  2. import { Container } from 'unstated';
  3. import { apiv3Get, apiv3Post, apiv3Put } from '../util/apiv3-client';
  4. /**
  5. * Service container for admin app setting page (AppSettings.jsx)
  6. * @extends {Container} unstated Container
  7. */
  8. export default class AdminAppContainer extends Container {
  9. constructor() {
  10. super();
  11. if (isServer()) {
  12. return;
  13. }
  14. this.state = {
  15. retrieveError: null,
  16. title: '',
  17. confidential: '',
  18. globalLang: '',
  19. isEmailPublishedForNewUser: true,
  20. fileUpload: '',
  21. isV5Compatible: null,
  22. siteUrl: '',
  23. siteUrlUseOnlyEnvVars: null,
  24. envSiteUrl: '',
  25. isSetSiteUrl: true,
  26. isMailerSetup: false,
  27. fromAddress: '',
  28. transmissionMethod: '',
  29. smtpHost: '',
  30. smtpPort: '',
  31. smtpUser: '',
  32. smtpPassword: '',
  33. sesAccessKeyId: '',
  34. sesSecretAccessKey: '',
  35. isMaintenanceMode: false,
  36. // TODO: remove this property when bulk export can be relased for cloud (https://redmine.weseek.co.jp/issues/163220)
  37. isBulkExportDisabledForCloud: false,
  38. };
  39. }
  40. /**
  41. * Workaround for the mangling in production build to break constructor.name
  42. */
  43. static getClassName() {
  44. return 'AdminAppContainer';
  45. }
  46. /**
  47. * retrieve app sttings data
  48. */
  49. async retrieveAppSettingsData() {
  50. const response = await apiv3Get('/app-settings/');
  51. const { appSettingsParams } = response.data;
  52. this.setState({
  53. title: appSettingsParams.title,
  54. confidential: appSettingsParams.confidential,
  55. globalLang: appSettingsParams.globalLang,
  56. isEmailPublishedForNewUser: appSettingsParams.isEmailPublishedForNewUser,
  57. fileUpload: appSettingsParams.fileUpload,
  58. isV5Compatible: appSettingsParams.isV5Compatible,
  59. siteUrl: appSettingsParams.siteUrl,
  60. siteUrlUseOnlyEnvVars: appSettingsParams.siteUrlUseOnlyEnvVars,
  61. envSiteUrl: appSettingsParams.envSiteUrl,
  62. isSetSiteUrl: !!appSettingsParams.siteUrl,
  63. isMailerSetup: appSettingsParams.isMailerSetup,
  64. fromAddress: appSettingsParams.fromAddress,
  65. transmissionMethod: appSettingsParams.transmissionMethod,
  66. smtpHost: appSettingsParams.smtpHost,
  67. smtpPort: appSettingsParams.smtpPort,
  68. smtpUser: appSettingsParams.smtpUser,
  69. smtpPassword: appSettingsParams.smtpPassword,
  70. sesAccessKeyId: appSettingsParams.sesAccessKeyId,
  71. sesSecretAccessKey: appSettingsParams.sesSecretAccessKey,
  72. isMaintenanceMode: appSettingsParams.isMaintenanceMode,
  73. // TODO: remove this property when bulk export can be relased for cloud (https://redmine.weseek.co.jp/issues/163220)
  74. isBulkExportDisabledForCloud: appSettingsParams.isBulkExportDisabledForCloud,
  75. });
  76. }
  77. /**
  78. * Change title
  79. */
  80. changeTitle(title) {
  81. this.setState({ title });
  82. }
  83. /**
  84. * Change confidential
  85. */
  86. changeConfidential(confidential) {
  87. this.setState({ confidential });
  88. }
  89. /**
  90. * Change globalLang
  91. */
  92. changeGlobalLang(globalLang) {
  93. this.setState({ globalLang });
  94. }
  95. /**
  96. * Change isEmailPublishedForNewUser
  97. */
  98. changeIsEmailPublishedForNewUserShow(isEmailPublishedForNewUser) {
  99. this.setState({ isEmailPublishedForNewUser });
  100. }
  101. /**
  102. * Change fileUpload
  103. */
  104. changeFileUpload(fileUpload) {
  105. this.setState({ fileUpload });
  106. }
  107. /**
  108. * Change site url
  109. */
  110. changeIsV5Compatible(isV5Compatible) {
  111. this.setState({ isV5Compatible });
  112. }
  113. /**
  114. * Change site url
  115. */
  116. changeSiteUrl(siteUrl) {
  117. this.setState({ siteUrl });
  118. }
  119. /**
  120. * Change from address
  121. */
  122. changeFromAddress(fromAddress) {
  123. this.setState({ fromAddress });
  124. }
  125. /**
  126. * Change from transmission method
  127. */
  128. changeTransmissionMethod(transmissionMethod) {
  129. this.setState({ transmissionMethod });
  130. }
  131. /**
  132. * Change smtp host
  133. */
  134. changeSmtpHost(smtpHost) {
  135. this.setState({ smtpHost });
  136. }
  137. /**
  138. * Change smtp port
  139. */
  140. changeSmtpPort(smtpPort) {
  141. this.setState({ smtpPort });
  142. }
  143. /**
  144. * Change smtp user
  145. */
  146. changeSmtpUser(smtpUser) {
  147. this.setState({ smtpUser });
  148. }
  149. /**
  150. * Change smtp password
  151. */
  152. changeSmtpPassword(smtpPassword) {
  153. this.setState({ smtpPassword });
  154. }
  155. /**
  156. * Change sesAccessKeyId
  157. */
  158. changeSesAccessKeyId(sesAccessKeyId) {
  159. this.setState({ sesAccessKeyId });
  160. }
  161. /**
  162. * Change sesSecretAccessKey
  163. */
  164. changeSesSecretAccessKey(sesSecretAccessKey) {
  165. this.setState({ sesSecretAccessKey });
  166. }
  167. /**
  168. * Update app setting
  169. * @memberOf AdminAppContainer
  170. * @return {Array} Appearance
  171. */
  172. async updateAppSettingHandler() {
  173. const response = await apiv3Put('/app-settings/app-setting', {
  174. title: this.state.title,
  175. confidential: this.state.confidential,
  176. globalLang: this.state.globalLang,
  177. isEmailPublishedForNewUser: this.state.isEmailPublishedForNewUser,
  178. fileUpload: this.state.fileUpload,
  179. });
  180. const { appSettingParams } = response.data;
  181. return appSettingParams;
  182. }
  183. /**
  184. * Update site url setting
  185. * @memberOf AdminAppContainer
  186. * @return {Array} Appearance
  187. */
  188. async updateSiteUrlSettingHandler() {
  189. const response = await apiv3Put('/app-settings/site-url-setting', {
  190. siteUrl: this.state.siteUrl,
  191. });
  192. const { siteUrlSettingParams } = response.data;
  193. return siteUrlSettingParams;
  194. }
  195. /**
  196. * Update mail setting
  197. * @memberOf AdminAppContainer
  198. * @return {Array} Appearance
  199. */
  200. updateMailSettingHandler() {
  201. if (this.state.transmissionMethod === 'smtp') {
  202. return this.updateSmtpSetting();
  203. }
  204. return this.updateSesSetting();
  205. }
  206. /**
  207. * Update smtp setting
  208. * @memberOf AdminAppContainer
  209. * @return {Array} Appearance
  210. */
  211. async updateSmtpSetting() {
  212. const response = await apiv3Put('/app-settings/smtp-setting', {
  213. fromAddress: this.state.fromAddress,
  214. transmissionMethod: this.state.transmissionMethod,
  215. smtpHost: this.state.smtpHost,
  216. smtpPort: this.state.smtpPort,
  217. smtpUser: this.state.smtpUser,
  218. smtpPassword: this.state.smtpPassword,
  219. });
  220. const { mailSettingParams } = response.data;
  221. this.setState({ isMailerSetup: mailSettingParams.isMailerSetup });
  222. return mailSettingParams;
  223. }
  224. /**
  225. * Update ses setting
  226. * @memberOf AdminAppContainer
  227. * @return {Array} Appearance
  228. */
  229. async updateSesSetting() {
  230. const response = await apiv3Put('/app-settings/ses-setting', {
  231. fromAddress: this.state.fromAddress,
  232. transmissionMethod: this.state.transmissionMethod,
  233. sesAccessKeyId: this.state.sesAccessKeyId,
  234. sesSecretAccessKey: this.state.sesSecretAccessKey,
  235. });
  236. const { mailSettingParams } = response.data;
  237. this.setState({ isMailerSetup: mailSettingParams.isMailerSetup });
  238. return mailSettingParams;
  239. }
  240. /**
  241. * send test e-mail
  242. * @memberOf AdminAppContainer
  243. */
  244. async sendTestEmail() {
  245. return apiv3Post('/app-settings/smtp-test');
  246. }
  247. /**
  248. * Start v5 page migration
  249. * @memberOf AdminAppContainer
  250. */
  251. async v5PageMigrationHandler() {
  252. const response = await apiv3Post('/app-settings/v5-schema-migration');
  253. const { isV5Compatible } = response.data;
  254. return { isV5Compatible };
  255. }
  256. async startMaintenanceMode() {
  257. await apiv3Post('/app-settings/maintenance-mode', { flag: true });
  258. }
  259. async endMaintenanceMode() {
  260. await apiv3Post('/app-settings/maintenance-mode', { flag: false });
  261. }
  262. }