| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- import React, { Fragment } from 'react';
- import PropTypes from 'prop-types';
- import { withTranslation } from 'react-i18next';
- import {
- TabContent, TabPane, Nav, NavItem, NavLink,
- } from 'reactstrap';
- import { withUnstatedContainers } from '../../UnstatedUtils';
- import AppContainer from '../../../services/AppContainer';
- import LdapSecuritySetting from './LdapSecuritySetting';
- import LocalSecuritySetting from './LocalSecuritySetting';
- import SamlSecuritySetting from './SamlSecuritySetting';
- import OidcSecuritySetting from './OidcSecuritySetting';
- import SecuritySetting from './SecuritySetting';
- import BasicSecuritySetting from './BasicSecuritySetting';
- import GoogleSecuritySetting from './GoogleSecuritySetting';
- import GitHubSecuritySetting from './GitHubSecuritySetting';
- import TwitterSecuritySetting from './TwitterSecuritySetting';
- import FacebookSecuritySetting from './FacebookSecuritySetting';
- import ShareLinkSetting from './ShareLinkSetting';
- class SecurityManagementContents extends React.Component {
- constructor() {
- super();
- this.state = {
- activeTab: 'passport-local',
- // Prevent unnecessary rendering
- activeComponents: new Set(['passport-local']),
- };
- this.toggleActiveTab = this.toggleActiveTab.bind(this);
- }
- toggleActiveTab(activeTab) {
- this.setState({
- activeTab, activeComponents: this.state.activeComponents.add(activeTab),
- });
- }
- render() {
- const { t } = this.props;
- const { activeTab, activeComponents } = this.state;
- return (
- <Fragment>
- <div className="mb-5">
- <SecuritySetting />
- </div>
- {/* Shared Link List */}
- <div className="mb-5">
- <ShareLinkSetting />
- </div>
- {/* XSS configuration link */}
- <div className="mb-5">
- <h2 className="border-bottom">{t('security_setting.xss_prevent_setting')}</h2>
- <div className="text-center">
- <a style={{ fontSize: 'large' }} href="/admin/markdown/#preventXSS">
- <i className="fa-fw icon-login"></i> {t('security_setting.xss_prevent_setting_link')}
- </a>
- </div>
- </div>
- <div className="auth-mechanism-configurations">
- <h2 className="border-bottom">{t('security_setting.Authentication mechanism settings')}</h2>
- <Nav tabs>
- <NavItem>
- <NavLink
- className={`${activeTab === 'passport-local' && 'active'} `}
- onClick={() => { this.toggleActiveTab('passport-local') }}
- href="#passport-local"
- >
- <i className="fa fa-users" /> ID/Pass
- </NavLink>
- </NavItem>
- <NavItem>
- <NavLink
- className={`${activeTab === 'passport-ldap' && 'active'} `}
- onClick={() => { this.toggleActiveTab('passport-ldap') }}
- href="#passport-ldap"
- >
- <i className="fa fa-sitemap" /> LDAP
- </NavLink>
- </NavItem>
- <NavItem>
- <NavLink
- className={`${activeTab === 'passport-saml' && 'active'} `}
- onClick={() => { this.toggleActiveTab('passport-saml') }}
- href="#passport-saml"
- >
- <i className="fa fa-key" /> SAML
- </NavLink>
- </NavItem>
- <NavItem>
- <NavLink
- className={`${activeTab === 'passport-oidc' && 'active'} `}
- onClick={() => { this.toggleActiveTab('passport-oidc') }}
- href="#passport-oidc"
- >
- <i className="fa fa-openid" /> OIDC
- </NavLink>
- </NavItem>
- <NavItem>
- <NavLink
- className={`${activeTab === 'passport-basic' && 'active'} `}
- onClick={() => { this.toggleActiveTab('passport-basic') }}
- href="#passport-basic"
- >
- <i className="fa fa-lock" /> BASIC
- </NavLink>
- </NavItem>
- <NavItem>
- <NavLink
- className={`${activeTab === 'passport-google' && 'active'} `}
- onClick={() => { this.toggleActiveTab('passport-google') }}
- href="#passport-google"
- >
- <i className="fa fa-google" /> Google
- </NavLink>
- </NavItem>
- <NavItem>
- <NavLink
- className={`${activeTab === 'passport-github' && 'active'} `}
- onClick={() => { this.toggleActiveTab('passport-github') }}
- href="#passport-github"
- >
- <i className="fa fa-github" /> GitHub
- </NavLink>
- </NavItem>
- <NavItem>
- <NavLink
- className={`${activeTab === 'passport-twitter' && 'active'} `}
- onClick={() => { this.toggleActiveTab('passport-twitter') }}
- href="#passport-twitter"
- >
- <i className="fa fa-twitter" /> Twitter
- </NavLink>
- </NavItem>
- <NavItem>
- <NavLink
- className={`${activeTab === 'passport-facebook' && 'active'} `}
- onClick={() => { this.toggleActiveTab('passport-facebook') }}
- href="#passport-facebook"
- >
- <i className="fa fa-facebook" /> (TBD) Facebook
- </NavLink>
- </NavItem>
- </Nav>
- <TabContent activeTab={activeTab} className="mt-2">
- <TabPane tabId="passport-local">
- {activeComponents.has('passport-local') && <LocalSecuritySetting />}
- </TabPane>
- <TabPane tabId="passport-ldap">
- {activeComponents.has('passport-ldap') && <LdapSecuritySetting />}
- </TabPane>
- <TabPane tabId="passport-saml">
- {activeComponents.has('passport-saml') && <SamlSecuritySetting />}
- </TabPane>
- <TabPane tabId="passport-oidc">
- {activeComponents.has('passport-oidc') && <OidcSecuritySetting />}
- </TabPane>
- <TabPane tabId="passport-basic">
- {activeComponents.has('passport-basic') && <BasicSecuritySetting />}
- </TabPane>
- <TabPane tabId="passport-google">
- {activeComponents.has('passport-google') && <GoogleSecuritySetting />}
- </TabPane>
- <TabPane tabId="passport-github">
- {activeComponents.has('passport-github') && <GitHubSecuritySetting />}
- </TabPane>
- <TabPane tabId="passport-twitter">
- {activeComponents.has('passport-twitter') && <TwitterSecuritySetting />}
- </TabPane>
- <TabPane tabId="passport-facebook">
- {activeComponents.has('passport-facebook') && <FacebookSecuritySetting />}
- </TabPane>
- </TabContent>
- </div>
- </Fragment>
- );
- }
- }
- SecurityManagementContents.propTypes = {
- t: PropTypes.func.isRequired, // i18next
- appContainer: PropTypes.instanceOf(AppContainer).isRequired,
- };
- const SecurityManagementContentsWrapper = withUnstatedContainers(SecurityManagementContents, [AppContainer]);
- export default withTranslation()(SecurityManagementContentsWrapper);
|