EditFirewall.jsx 5.2 KB

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