itizawa 6 лет назад
Родитель
Сommit
3c2f193821

+ 6 - 5
src/client/js/app.jsx

@@ -55,11 +55,11 @@ import EditorContainer from './services/EditorContainer';
 import TagContainer from './services/TagContainer';
 import UserGroupDetailContainer from './services/UserGroupDetailContainer';
 import AdminUsersContainer from './services/AdminUsersContainer';
-import AdminSecurityContainer from './services/AdminSecurityContainer';
+import AdminGeneralSecurityContainer from './services/AdminGeneralSecurityContainer';
+import AdminLdapSecurityContainer from './services/AdminLdapSecurityContainer';
 import WebsocketContainer from './services/WebsocketContainer';
 import MarkDownSettingContainer from './services/MarkDownSettingContainer';
 import AdminExternalAccountsContainer from './services/AdminExternalAccountsContainer';
-import AdminSecurityLdapContainer from './services/AdminSecutityLdapContainer';
 
 const logger = loggerFactory('growi:app');
 
@@ -215,10 +215,11 @@ if (adminMarkDownSettingElem != null) {
 
 const adminSecuritySettingElem = document.getElementById('admin-security-setting');
 if (adminSecuritySettingElem != null) {
-  const adminSecurityContainer = new AdminSecurityContainer(appContainer);
-  const adminSecurityLdapContainer = new AdminSecurityLdapContainer(appContainer);
+  const adminGeneralSecurityContainer = new AdminGeneralSecurityContainer(appContainer);
+  const adminLdapSecurityContainer = new AdminLdapSecurityContainer(appContainer);
+  const adminSecurityContainers = [adminGeneralSecurityContainer, adminLdapSecurityContainer];
   ReactDOM.render(
-    <Provider inject={[injectableContainers, adminSecurityContainer, adminSecurityLdapContainer]}>
+    <Provider inject={[injectableContainers, adminSecurityContainers]}>
       <I18nextProvider i18n={i18n}>
         <SecurityManagement />
       </I18nextProvider>

+ 35 - 35
src/client/js/components/Admin/Security/SecurityLdapSetting.jsx

@@ -5,14 +5,14 @@ import { withTranslation } from 'react-i18next';
 import { createSubscribedElement } from '../../UnstatedUtils';
 
 import AppContainer from '../../../services/AppContainer';
-import AdminSecurityContainer from '../../../services/AdminSecurityContainer';
-import AdminSecurityLdapContainer from '../../../services/AdminSecutityLdapContainer';
+import AdminGeneralSecurityContainer from '../../../services/AdminGeneralSecurityContainer';
+import AdminLdapSecurityContainer from '../../../services/AdminLdapSecurityContainer';
 
 class SecurityLdapSetting extends React.Component {
 
   render() {
-    const { t, adminSecurityContainer, adminSecurityLdapContainer } = this.props;
-    const { isLdapConfigEnabled } = adminSecurityContainer.state;
+    const { t, adminGeneralSecurityContainer, adminLdapSecurityContainer } = this.props;
+    const { isLdapConfigEnabled } = adminGeneralSecurityContainer.state;
 
     return (
       <React.Fragment>
@@ -29,7 +29,7 @@ class SecurityLdapSetting extends React.Component {
                 id="isLdapEnabled"
                 type="checkbox"
                 checked={isLdapConfigEnabled}
-                onChange={() => { adminSecurityContainer.switchIsLdapEnabled() }}
+                onChange={() => { adminGeneralSecurityContainer.switchIsLdapEnabled() }}
               />
               <label htmlFor="isLdapEnabled">
                 { t('security_setting.ldap.enable_ldap') }
@@ -48,8 +48,8 @@ class SecurityLdapSetting extends React.Component {
                   className="form-control"
                   type="text"
                   name="serverUrl"
-                  value={adminSecurityLdapContainer.state.serverUrl}
-                  onChange={e => adminSecurityLdapContainer.changeServerUrl(e.target.value)}
+                  value={adminLdapSecurityContainer.state.serverUrl}
+                  onChange={e => adminLdapSecurityContainer.changeServerUrl(e.target.value)}
                 />
                 <small>
                   <p
@@ -68,17 +68,17 @@ class SecurityLdapSetting extends React.Component {
                 <div className="my-0 btn-group">
                   <div className="dropdown">
                     <button className="btn btn-default dropdown-toggle w-100" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                      <span className="pull-left">{t(`security_setting.ldap.bind_${adminSecurityLdapContainer.state.bindMode}`)}</span>
+                      <span className="pull-left">{t(`security_setting.ldap.bind_${adminLdapSecurityContainer.state.bindMode}`)}</span>
                       <span className="bs-caret pull-right">
                         <span className="caret" />
                       </span>
                     </button>
                     {/* TODO adjust dropdown after BS4 */}
                     <ul className="dropdown-menu" role="menu">
-                      <li key="manager" role="presentation" type="button" onClick={() => { adminSecurityLdapContainer.changeLdapBindMode('manager') }}>
+                      <li key="manager" role="presentation" type="button" onClick={() => { adminLdapSecurityContainer.changeLdapBindMode('manager') }}>
                         <a role="menuitem">{ t('security_setting.ldap.bind_manager') }</a>
                       </li>
-                      <li key="user" role="presentation" type="button" onClick={() => { adminSecurityLdapContainer.changeLdapBindMode('user') }}>
+                      <li key="user" role="presentation" type="button" onClick={() => { adminLdapSecurityContainer.changeLdapBindMode('user') }}>
                         <a role="menuitem">{ t('security_setting.ldap.bind_user') }</a>
                       </li>
                     </ul>
@@ -94,10 +94,10 @@ class SecurityLdapSetting extends React.Component {
                   className="form-control"
                   type="text"
                   name="bindDN"
-                  value={adminSecurityLdapContainer.state.bindDN}
-                  onChange={e => adminSecurityLdapContainer.changeBindDN(e.target.value)}
+                  value={adminLdapSecurityContainer.state.bindDN}
+                  onChange={e => adminLdapSecurityContainer.changeBindDN(e.target.value)}
                 />
-                {(adminSecurityLdapContainer.state.bindMode === 'manager') ? (
+                {(adminLdapSecurityContainer.state.bindMode === 'manager') ? (
                   <p className="help-block passport-ldap-managerbind">
                     <small>
                       { t('security_setting.ldap.bind_DN_manager_detail') }<br />
@@ -126,10 +126,10 @@ class SecurityLdapSetting extends React.Component {
                   className="form-control passport-ldap-managerbind"
                   type="password"
                   name="bindDNPassword"
-                  value={adminSecurityLdapContainer.state.bindDNPassword}
-                  onChange={e => adminSecurityLdapContainer.changeBindDNPassword(e.target.value)}
+                  value={adminLdapSecurityContainer.state.bindDNPassword}
+                  onChange={e => adminLdapSecurityContainer.changeBindDNPassword(e.target.value)}
                 />
-                {(adminSecurityLdapContainer.state.bindMode === 'manager') ? (
+                {(adminLdapSecurityContainer.state.bindMode === 'manager') ? (
                   <p className="help-block passport-ldap-managerbind">
                     <small>
                       { t('security_setting.ldap.bind_DN_password_manager_detail') }
@@ -152,8 +152,8 @@ class SecurityLdapSetting extends React.Component {
                   className="form-control"
                   type="text"
                   name="searchFilter"
-                  value={adminSecurityLdapContainer.state.searchFilter}
-                  onChange={e => adminSecurityLdapContainer.changeSearchFilter(e.target.value)}
+                  value={adminLdapSecurityContainer.state.searchFilter}
+                  onChange={e => adminLdapSecurityContainer.changeSearchFilter(e.target.value)}
                 />
                 <p className="help-block">
                   <small>
@@ -187,8 +187,8 @@ class SecurityLdapSetting extends React.Component {
                   type="text"
                   placeholder="Default: uid"
                   name="attrMapUsername"
-                  value={adminSecurityLdapContainer.state.attrMapUsername}
-                  onChange={e => adminSecurityLdapContainer.changeAttrMapUsername(e.target.value)}
+                  value={adminLdapSecurityContainer.state.attrMapUsername}
+                  onChange={e => adminLdapSecurityContainer.changeAttrMapUsername(e.target.value)}
                 />
                 <p className="help-block">
                   {/* eslint-disable-next-line react/no-danger */}
@@ -203,8 +203,8 @@ class SecurityLdapSetting extends React.Component {
                   <input
                     id="cbSameUsernameTreatedAsIdenticalUser"
                     type="checkbox"
-                    checked={adminSecurityLdapContainer.state.cbSameUsernameTreatedAsIdenticalUser}
-                    onChange={() => { adminSecurityLdapContainer.switchCbSameUsernameTreatedAsIdenticalUser() }}
+                    checked={adminLdapSecurityContainer.state.cbSameUsernameTreatedAsIdenticalUser}
+                    onChange={() => { adminLdapSecurityContainer.switchCbSameUsernameTreatedAsIdenticalUser() }}
                   />
                   <label
                     htmlFor="cbSameUsernameTreatedAsIdenticalUser"
@@ -227,8 +227,8 @@ class SecurityLdapSetting extends React.Component {
                   type="text"
                   placeholder="Default: mail"
                   name="attrMapMail"
-                  value={adminSecurityLdapContainer.state.attrMapMail}
-                  onChange={e => adminSecurityLdapContainer.changeAttrMapMail(e.target.value)}
+                  value={adminLdapSecurityContainer.state.attrMapMail}
+                  onChange={e => adminLdapSecurityContainer.changeAttrMapMail(e.target.value)}
                 />
                 <p className="help-block">
                   <small>
@@ -245,8 +245,8 @@ class SecurityLdapSetting extends React.Component {
                   className="form-control"
                   type="text"
                   name="attrMapName"
-                  value={adminSecurityLdapContainer.state.attrMapName}
-                  onChange={e => adminSecurityLdapContainer.changeAttrMapName(e.target.value)}
+                  value={adminLdapSecurityContainer.state.attrMapName}
+                  onChange={e => adminLdapSecurityContainer.changeAttrMapName(e.target.value)}
                 />
                 <p className="help-block">
                   <small>
@@ -268,8 +268,8 @@ class SecurityLdapSetting extends React.Component {
                   className="form-control"
                   type="text"
                   name="groupSearchBase"
-                  value={adminSecurityLdapContainer.state.groupSearchBase}
-                  onChange={e => adminSecurityLdapContainer.changeGroupSearchBase(e.target.value)}
+                  value={adminLdapSecurityContainer.state.groupSearchBase}
+                  onChange={e => adminLdapSecurityContainer.changeGroupSearchBase(e.target.value)}
                 />
                 <p className="help-block">
                   <small>
@@ -288,8 +288,8 @@ class SecurityLdapSetting extends React.Component {
                   className="form-control"
                   type="text"
                   name="groupSearchFilter"
-                  value={adminSecurityLdapContainer.state.groupSearchFilter}
-                  onChange={e => adminSecurityLdapContainer.changeGroupSearchFilter(e.target.value)}
+                  value={adminLdapSecurityContainer.state.groupSearchFilter}
+                  onChange={e => adminLdapSecurityContainer.changeGroupSearchFilter(e.target.value)}
                 />
                 <p className="help-block">
                   <small>
@@ -318,8 +318,8 @@ class SecurityLdapSetting extends React.Component {
                   type="text"
                   placeholder="Default: uid"
                   name="groupDnProperty"
-                  value={adminSecurityLdapContainer.state.groupDnProperty}
-                  onChange={e => adminSecurityLdapContainer.changeGroupDnProperty(e.target.value)}
+                  value={adminLdapSecurityContainer.state.groupDnProperty}
+                  onChange={e => adminLdapSecurityContainer.changeGroupDnProperty(e.target.value)}
                 />
                 <p className="help-block">
                   {/* eslint-disable-next-line react/no-danger */}
@@ -340,12 +340,12 @@ class SecurityLdapSetting extends React.Component {
 SecurityLdapSetting.propTypes = {
   t: PropTypes.func.isRequired, // i18next
   appContainer: PropTypes.instanceOf(AppContainer).isRequired,
-  adminSecurityContainer: PropTypes.instanceOf(AdminSecurityContainer).isRequired,
-  adminSecurityLdapContainer: PropTypes.instanceOf(AdminSecurityLdapContainer).isRequired,
+  adminGeneralSecurityContainer: PropTypes.instanceOf(AdminGeneralSecurityContainer).isRequired,
+  adminLdapSecurityContainer: PropTypes.instanceOf(AdminLdapSecurityContainer).isRequired,
 };
 
 const SecurityLdapSettingWrapper = (props) => {
-  return createSubscribedElement(SecurityLdapSetting, props, [AppContainer, AdminSecurityContainer, AdminSecurityLdapContainer]);
+  return createSubscribedElement(SecurityLdapSetting, props, [AppContainer, AdminGeneralSecurityContainer, AdminLdapSecurityContainer]);
 };
 
 export default withTranslation()(SecurityLdapSettingWrapper);

+ 28 - 13
src/client/js/components/Admin/Security/SecurityLocalSetting.jsx

@@ -5,12 +5,12 @@ import { withTranslation } from 'react-i18next';
 import { createSubscribedElement } from '../../UnstatedUtils';
 
 import AppContainer from '../../../services/AppContainer';
-import AdminSecurityContainer from '../../../services/AdminSecurityContainer';
+import AdminGeneralSecurityContainer from '../../../services/AdminGeneralSecurityContainer';
 
 class SecurityLocalSetting extends React.Component {
 
   render() {
-    const { t, adminSecurityContainer } = this.props;
+    const { t, adminGeneralSecurityContainer } = this.props;
 
     return (
       <React.Fragment>
@@ -19,7 +19,7 @@ class SecurityLocalSetting extends React.Component {
           { t('security_setting.Local.name') } { t('security_setting.configuration') }
         </h2>
 
-        {adminSecurityContainer.state.useOnlyEnvVarsForSomeOptions && (
+        {adminGeneralSecurityContainer.state.useOnlyEnvVarsForSomeOptions && (
         <p className="alert alert-info">
           { t('security_setting.Local.note for the only env option', 'LOCAL_STRATEGY_USES_ONLY_ENV_VARS_FOR_SOME_OPTIONS') }
         </p>
@@ -32,8 +32,8 @@ class SecurityLocalSetting extends React.Component {
               <input
                 id="isLocalEnabled"
                 type="checkbox"
-                checked={adminSecurityContainer.state.isLocalEnabled}
-                onChange={() => { adminSecurityContainer.switchIsLocalEnabled() }}
+                checked={adminGeneralSecurityContainer.state.isLocalEnabled}
+                onChange={() => { adminGeneralSecurityContainer.switchIsLocalEnabled() }}
               />
               <label htmlFor="isLocalEnabled">
                 { t('security_setting.Local.enable_local') }
@@ -42,7 +42,7 @@ class SecurityLocalSetting extends React.Component {
           </div>
         </div>
 
-        {adminSecurityContainer.state.isLocalEnabled && (
+        {adminGeneralSecurityContainer.state.isLocalEnabled && (
           <div>
             <div className="row mb-5">
               <strong className="col-xs-3 text-right">{ t('Register limitation') }</strong>
@@ -50,20 +50,35 @@ class SecurityLocalSetting extends React.Component {
                 <div className="my-0 btn-group">
                   <div className="dropdown">
                     <button className="btn btn-default dropdown-toggle w-100" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                      <span className="pull-left">{t(`security_setting.registration_mode.${adminSecurityContainer.state.registrationMode}`)}</span>
+                      <span className="pull-left">{t(`security_setting.registration_mode.${adminGeneralSecurityContainer.state.registrationMode}`)}</span>
                       <span className="bs-caret pull-right">
                         <span className="caret" />
                       </span>
                     </button>
                     {/* TODO adjust dropdown after BS4 */}
                     <ul className="dropdown-menu" role="menu">
-                      <li key="open" role="presentation" type="button" onClick={() => { adminSecurityContainer.changeRegistrationMode('open') }}>
+                      <li
+                        key="open"
+                        role="presentation"
+                        type="button"
+                        onClick={() => { adminGeneralSecurityContainer.changeRegistrationMode('open') }}
+                      >
                         <a role="menuitem">{ t('security_setting.registration_mode.open') }</a>
                       </li>
-                      <li key="restricted" role="presentation" type="button" onClick={() => { adminSecurityContainer.changeRegistrationMode('restricted') }}>
+                      <li
+                        key="restricted"
+                        role="presentation"
+                        type="button"
+                        onClick={() => { adminGeneralSecurityContainer.changeRegistrationMode('restricted') }}
+                      >
                         <a role="menuitem">{ t('security_setting.registration_mode.restricted') }</a>
                       </li>
-                      <li key="closed" role="presentation" type="button" onClick={() => { adminSecurityContainer.changeRegistrationMode('closed') }}>
+                      <li
+                        key="closed"
+                        role="presentation"
+                        type="button"
+                        onClick={() => { adminGeneralSecurityContainer.changeRegistrationMode('closed') }}
+                      >
                         <a role="menuitem">{ t('security_setting.registration_mode.closed') }</a>
                       </li>
                     </ul>
@@ -83,7 +98,7 @@ class SecurityLocalSetting extends React.Component {
                     className="form-control"
                     type="textarea"
                     name="registrationWhiteList"
-                    placeholder={adminSecurityContainer.state.registrationWhiteList}
+                    placeholder={adminGeneralSecurityContainer.state.registrationWhiteList}
                   />
                   <p className="help-block small">{ t('security_setting.restrict_emails') }<br />{ t('security_setting.for_instance') }
                     <code>@growi.org</code>{ t('security_setting.only_those') }<br />
@@ -109,11 +124,11 @@ class SecurityLocalSetting extends React.Component {
 SecurityLocalSetting.propTypes = {
   t: PropTypes.func.isRequired, // i18next
   appContainer: PropTypes.instanceOf(AppContainer).isRequired,
-  adminSecurityContainer: PropTypes.instanceOf(AdminSecurityContainer).isRequired,
+  adminGeneralSecurityContainer: PropTypes.instanceOf(AdminGeneralSecurityContainer).isRequired,
 };
 
 const SecurityLocalSettingWrapper = (props) => {
-  return createSubscribedElement(SecurityLocalSetting, props, [AppContainer, AdminSecurityContainer]);
+  return createSubscribedElement(SecurityLocalSetting, props, [AppContainer, AdminGeneralSecurityContainer]);
 };
 
 export default withTranslation()(SecurityLocalSettingWrapper);

+ 3 - 3
src/client/js/services/AdminSecurityContainer.js → src/client/js/services/AdminGeneralSecurityContainer.js

@@ -3,13 +3,13 @@ import { Container } from 'unstated';
 import loggerFactory from '@alias/logger';
 
 // eslint-disable-next-line no-unused-vars
-const logger = loggerFactory('growi:services:AdminSecurityContainer');
+const logger = loggerFactory('growi:security:AdminGeneralSecurityContainer');
 
 /**
  * Service container for admin security page (SecurityManagement.jsx)
  * @extends {Container} unstated Container
  */
-export default class AdminSecurityContainer extends Container {
+export default class AdminGeneralSecurityContainer extends Container {
 
   constructor(appContainer) {
     super();
@@ -40,7 +40,7 @@ export default class AdminSecurityContainer extends Container {
    * Workaround for the mangling in production build to break constructor.name
    */
   static getClassName() {
-    return 'AdminSecurityContainer';
+    return 'AdminGeneralSecurityContainer';
   }
 
   /**

+ 4 - 4
src/client/js/services/AdminSecutityLdapContainer.js → src/client/js/services/AdminLdapSecurityContainer.js

@@ -3,13 +3,13 @@ import { Container } from 'unstated';
 import loggerFactory from '@alias/logger';
 
 // eslint-disable-next-line no-unused-vars
-const logger = loggerFactory('growi:services:AdminSecurityLdapContainer');
+const logger = loggerFactory('growi:security:AdminLdapSecurityLdapContainer');
 
 /**
- * Service container for admin security page (SecurityManagement.jsx)
+ * Service container for admin security page (SecurityLdapSetting.jsx)
  * @extends {Container} unstated Container
  */
-export default class AdminSecurityLdapContainer extends Container {
+export default class AdminLdapSecurityContainer extends Container {
 
   constructor(appContainer) {
     super();
@@ -45,7 +45,7 @@ export default class AdminSecurityLdapContainer extends Container {
    * Workaround for the mangling in production build to break constructor.name
    */
   static getClassName() {
-    return 'AdminSecurityLdapContainer';
+    return 'AdminLdapSecurityContainer';
   }
 
   /**