nologin.jsx 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { I18nextProvider } from 'react-i18next';
  4. import { SWRConfig } from 'swr';
  5. import { Provider } from 'unstated';
  6. import AppContainer from '~/client/services/AppContainer';
  7. import CompleteUserRegistrationForm from '~/components/CompleteUserRegistrationForm';
  8. import { swrGlobalConfiguration } from '~/utils/swr-utils';
  9. import LoginForm from '../components/LoginForm';
  10. import PasswordResetExecutionForm from '../components/PasswordResetExecutionForm';
  11. import PasswordResetRequestForm from '../components/PasswordResetRequestForm';
  12. import ContextExtractor from './services/ContextExtractor';
  13. import { i18nFactory } from './util/i18n';
  14. const i18n = i18nFactory();
  15. const componentMappings = {};
  16. const appContainer = new AppContainer();
  17. appContainer.initApp();
  18. // render loginForm
  19. const loginFormElem = document.getElementById('login-form');
  20. if (loginFormElem) {
  21. const username = loginFormElem.dataset.username;
  22. const name = loginFormElem.dataset.name;
  23. const email = loginFormElem.dataset.email;
  24. const isRegistrationEnabled = loginFormElem.dataset.isRegistrationEnabled === 'true';
  25. const isEmailAuthenticationEnabled = loginFormElem.dataset.isEmailAuthenticationEnabled === 'true';
  26. const registrationMode = loginFormElem.dataset.registrationMode;
  27. const isPasswordResetEnabled = loginFormElem.dataset.isPasswordResetEnabled === 'true';
  28. let registrationWhiteList = loginFormElem.dataset.registrationWhiteList;
  29. registrationWhiteList = registrationWhiteList.length > 0
  30. ? registrationWhiteList = loginFormElem.dataset.registrationWhiteList.split(',')
  31. : registrationWhiteList = [];
  32. const isLocalStrategySetup = loginFormElem.dataset.isLocalStrategySetup === 'true';
  33. const isLdapStrategySetup = loginFormElem.dataset.isLdapStrategySetup === 'true';
  34. const objOfIsExternalAuthEnableds = {
  35. google: loginFormElem.dataset.isGoogleAuthEnabled === 'true',
  36. github: loginFormElem.dataset.isGithubAuthEnabled === 'true',
  37. facebook: loginFormElem.dataset.isFacebookAuthEnabled === 'true',
  38. twitter: loginFormElem.dataset.isTwitterAuthEnabled === 'true',
  39. saml: loginFormElem.dataset.isSamlAuthEnabled === 'true',
  40. oidc: loginFormElem.dataset.isOidcAuthEnabled === 'true',
  41. basic: loginFormElem.dataset.isBasicAuthEnabled === 'true',
  42. };
  43. Object.assign(componentMappings, {
  44. [loginFormElem.id]: (
  45. <LoginForm
  46. username={username}
  47. name={name}
  48. email={email}
  49. isRegistrationEnabled={isRegistrationEnabled}
  50. isEmailAuthenticationEnabled={isEmailAuthenticationEnabled}
  51. registrationMode={registrationMode}
  52. registrationWhiteList={registrationWhiteList}
  53. isPasswordResetEnabled={isPasswordResetEnabled}
  54. isLocalStrategySetup={isLocalStrategySetup}
  55. isLdapStrategySetup={isLdapStrategySetup}
  56. objOfIsExternalAuthEnableds={objOfIsExternalAuthEnableds}
  57. />
  58. ),
  59. });
  60. }
  61. // render PasswordResetRequestForm
  62. const passwordResetRequestFormElem = document.getElementById('password-reset-request-form');
  63. if (passwordResetRequestFormElem) {
  64. Object.assign(componentMappings, {
  65. [passwordResetRequestFormElem.id]: <PasswordResetRequestForm />,
  66. });
  67. }
  68. // render PasswordResetExecutionForm
  69. const passwordResetExecutionFormElem = document.getElementById('password-reset-execution-form');
  70. if (passwordResetExecutionFormElem) {
  71. Object.assign(componentMappings, {
  72. [passwordResetExecutionFormElem.id]: <PasswordResetExecutionForm />,
  73. });
  74. }
  75. // render UserActivationForm
  76. const UserActivationForm = document.getElementById('user-activation-form');
  77. if (UserActivationForm) {
  78. const messageErrors = UserActivationForm.dataset.messageErrors;
  79. const inputs = UserActivationForm.dataset.inputs;
  80. const email = UserActivationForm.dataset.email;
  81. const token = UserActivationForm.dataset.token;
  82. Object.assign(componentMappings, {
  83. [UserActivationForm.id]: (
  84. <CompleteUserRegistrationForm
  85. messageErrors={messageErrors}
  86. inputs={inputs}
  87. email={email}
  88. token={token}
  89. />
  90. ),
  91. });
  92. }
  93. const renderMainComponents = () => {
  94. Object.keys(componentMappings).forEach((key) => {
  95. const elem = document.getElementById(key);
  96. if (elem) {
  97. ReactDOM.render(
  98. <I18nextProvider i18n={i18n}>
  99. <SWRConfig value={swrGlobalConfiguration}>
  100. <Provider inject={[appContainer]}>
  101. {componentMappings[key]}
  102. </Provider>
  103. </SWRConfig>
  104. </I18nextProvider>,
  105. elem,
  106. );
  107. }
  108. });
  109. };
  110. // extract context before rendering main components
  111. const elem = document.getElementById('growi-context-extractor');
  112. if (elem != null) {
  113. ReactDOM.render(
  114. <SWRConfig value={swrGlobalConfiguration}>
  115. <ContextExtractor></ContextExtractor>
  116. </SWRConfig>,
  117. elem,
  118. renderMainComponents,
  119. );
  120. }
  121. else {
  122. renderMainComponents();
  123. }