AdminAppContainer.js 6.8 KB

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