EditFirewall.jsx 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import React, { useEffect, useState } from 'react';
  2. import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions";
  3. import { getFirewallInfo, updateFirewall } from '../../../ControlPanelService/Firewalls';
  4. import SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';
  5. import TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';
  6. import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';
  7. import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
  8. import Spinner from '../../../components/Spinner/Spinner';
  9. import Toolbar from '../../MainNav/Toolbar/Toolbar';
  10. import { useHistory } from 'react-router-dom';
  11. import { useDispatch, useSelector } from 'react-redux';
  12. import QS from 'qs';
  13. import './EditFirewall.scss';
  14. import { Helmet } from 'react-helmet';
  15. import { checkAuthHandler } from 'src/actions/Session/sessionActions';
  16. import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';
  17. import HtmlParser from 'react-html-parser';
  18. const EditFirewall = props => {
  19. const token = localStorage.getItem("token");
  20. const { i18n } = useSelector(state => state.session);
  21. const history = useHistory();
  22. const dispatch = useDispatch();
  23. const [state, setState] = useState({
  24. data: {},
  25. loading: false,
  26. errorMessage: '',
  27. okMessage: ''
  28. });
  29. useEffect(() => {
  30. let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true });
  31. const { rule } = queryParams;
  32. dispatch(addActiveElement('/list/firewall/'));
  33. dispatch(removeFocusedElement());
  34. if (rule) {
  35. setState({ ...state, loading: true });
  36. getFirewallInfo(rule)
  37. .then(response => {
  38. setState({
  39. ...state,
  40. data: response.data,
  41. errorMessage: response.data['error_msg'],
  42. okMessage: response.data['ok_msg'],
  43. loading: false
  44. });
  45. })
  46. .catch(err => console.error(err));
  47. }
  48. }, []);
  49. const submitFormHandler = event => {
  50. event.preventDefault();
  51. let updatedDomain = {};
  52. for (var [name, value] of (new FormData(event.target)).entries()) {
  53. updatedDomain[name] = value;
  54. }
  55. if (Object.keys(updatedDomain).length !== 0 && updatedDomain.constructor === Object) {
  56. setState({ ...state, loading: true });
  57. updateFirewall(updatedDomain, state.data.domain)
  58. .then(result => {
  59. if (result.status === 200) {
  60. const { error_msg: errorMessage, ok_msg: okMessage } = result.data;
  61. if (errorMessage) {
  62. setState({ ...state, errorMessage, okMessage, loading: false });
  63. } else {
  64. dispatch(refreshCounters()).then(() => {
  65. setState({ ...state, okMessage, errorMessage: '', loading: false });
  66. });
  67. }
  68. }
  69. })
  70. .catch(err => console.error(err));
  71. }
  72. }
  73. return (
  74. <div className="edit-template edit-firewall">
  75. <Helmet>
  76. <title>{`Vesta - ${i18n.FIREWALL}`}</title>
  77. </Helmet>
  78. <Toolbar mobile={false}>
  79. <div></div>
  80. <div className="search-toolbar-name">{i18n['Editing Firewall Rule']}</div>
  81. <div className="error">
  82. <span className="error-message">
  83. {state.data.errorMessage ? <FontAwesomeIcon icon="long-arrow-alt-right" /> : ''} {state.errorMessage}
  84. </span>
  85. </div>
  86. <div className="success">
  87. <span className="ok-message">
  88. {state.okMessage ? <FontAwesomeIcon icon="long-arrow-alt-right" /> : ''} <span>{HtmlParser(state.okMessage)}</span>
  89. </span>
  90. </div>
  91. </Toolbar>
  92. <AddItemLayout date={state.data.date} time={state.data.time} status={state.data.status}>
  93. {state.loading ? <Spinner /> :
  94. <form onSubmit={event => submitFormHandler(event)} id="edit-firewall">
  95. <input type="hidden" name="save" value="save" />
  96. <input type="hidden" name="token" value={token} />
  97. <SelectInput
  98. options={state.data.actions}
  99. selected={state.data.action}
  100. title={i18n['Action']}
  101. name="v_action"
  102. id="action" />
  103. <SelectInput
  104. options={state.data.protocols}
  105. selected={state.data.protocol}
  106. title={i18n['Protocol']}
  107. name="v_protocol"
  108. id="protocol" />
  109. <TextInput
  110. optionalTitle={i18n['ranges are acceptable']}
  111. value={state.data.port}
  112. title={i18n['Port']}
  113. name="v_port"
  114. id="port" />
  115. <TextInput
  116. optionalTitle={i18n['CIDR format is supported']}
  117. value={state.data.ip}
  118. title={i18n['IP address']}
  119. name="v_ip"
  120. id="ip" />
  121. <TextInput
  122. optionalTitle={i18n['optional']}
  123. value={state.data.comment}
  124. title={i18n['Comment']}
  125. name="v_comment"
  126. id="comment" />
  127. <div className="buttons-wrapper">
  128. <button type="submit" className="add">{i18n.Save}</button>
  129. <button type="button" className="back" onClick={() => history.push('/list/firewall/')}>{i18n.Back}</button>
  130. </div>
  131. </form>
  132. }
  133. </AddItemLayout>
  134. </div>
  135. );
  136. }
  137. export default EditFirewall;