SamlSecuritySetting.jsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /* eslint-disable react/no-danger */
  2. import React from 'react';
  3. import PropTypes from 'prop-types';
  4. import { withTranslation } from 'react-i18next';
  5. import { createSubscribedElement } from '../../UnstatedUtils';
  6. import AppContainer from '../../../services/AppContainer';
  7. import AdminGeneralSecurityContainer from '../../../services/AdminGeneralSecurityContainer';
  8. import AdminSamlSecurityContainer from '../../../services/AdminSamlSecurityContainer';
  9. class SamlSecurityManagement extends React.Component {
  10. render() {
  11. const { t, adminGeneralSecurityContainer, adminSamlSecurityContainer } = this.props;
  12. return (
  13. <React.Fragment>
  14. {adminGeneralSecurityContainer.state.useOnlyEnvVarsForSomeOptions && (
  15. <p
  16. className="alert alert-info"
  17. dangerouslySetInnerHTML={{ __html: t('security_setting.SAML.note for the only env option', { env: 'SAML_USES_ONLY_ENV_VARS_FOR_SOME_OPTIONS' }) }}
  18. />
  19. )}
  20. <div className="row mb-5">
  21. <strong className="col-xs-3 text-right">{ t('security_setting.SAML.name') }</strong>
  22. <div className="col-xs-6 text-left">
  23. <div className="checkbox checkbox-success">
  24. <input
  25. id="isSamlEnabled"
  26. type="checkbox"
  27. checked={adminGeneralSecurityContainer.state.isSamlEnabled}
  28. onChange={() => { adminGeneralSecurityContainer.switchIsSamlEnabled() }}
  29. />
  30. <label htmlFor="isSamlEnabled">
  31. { t('security_setting.SAML.enable_saml') }
  32. </label>
  33. </div>
  34. </div>
  35. </div>
  36. <div className="row mb-5">
  37. <label className="col-xs-3 text-right">{ t('security_setting.callback_URL') }</label>
  38. <div className="col-xs-6">
  39. <input
  40. className="form-control"
  41. type="text"
  42. value={adminSamlSecurityContainer.state.callbackUrl}
  43. readOnly
  44. />
  45. <p className="help-block small">{ t('security_setting.desc_of_callback_URL') }</p>
  46. {!adminSamlSecurityContainer.state.appSiteUrl && (
  47. <div className="alert alert-danger">
  48. <i
  49. className="icon-exclamation"
  50. // eslint-disable-next-line max-len
  51. dangerouslySetInnerHTML={{ __html: t('security_setting.alert_siteUrl_is_not_set', { link: `<a href="/admin/app">${t('App settings')}<i class="icon-login"></i></a>` }) }}
  52. />
  53. </div>
  54. )}
  55. </div>
  56. </div>
  57. {adminGeneralSecurityContainer.state.isSamlEnabled && (
  58. <React.Fragment>
  59. {(adminSamlSecurityContainer.state.missingMandatoryConfigKeys.length !== 0) && (
  60. <div className="alert alert-danger">
  61. { t('security_setting.missing mandatory configs') }
  62. <ul>
  63. {/* TODO GW-583 show li after fetch data */}
  64. {/* <li>{ t('security_setting.form_item_name.key') }</li> */}
  65. </ul>
  66. </div>
  67. )}
  68. </React.Fragment>
  69. )}
  70. </React.Fragment>
  71. );
  72. }
  73. }
  74. SamlSecurityManagement.propTypes = {
  75. t: PropTypes.func.isRequired, // i18next
  76. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  77. adminGeneralSecurityContainer: PropTypes.instanceOf(AdminGeneralSecurityContainer).isRequired,
  78. adminSamlSecurityContainer: PropTypes.instanceOf(AdminSamlSecurityContainer).isRequired,
  79. };
  80. const SamlSecurityManagementWrapper = (props) => {
  81. return createSubscribedElement(SamlSecurityManagement, props, [AppContainer, AdminGeneralSecurityContainer, AdminSamlSecurityContainer]);
  82. };
  83. export default withTranslation()(SamlSecurityManagementWrapper);