Files
firegex-traffic-viewer/frontend/src/components/RegexView/index.tsx

89 lines
3.7 KiB
TypeScript
Raw Normal View History

2022-06-14 22:43:48 +02:00
import { Grid, Text, Title, Badge, Space, ActionIcon, Tooltip } from '@mantine/core';
2022-06-12 16:44:54 +02:00
import React, { useState } from 'react';
2022-06-12 12:09:50 +02:00
import { RegexFilter } from '../../js/models';
2022-06-13 10:59:05 +02:00
import { deleteregex, errorNotify, getHumanReadableRegex, okNotify } from '../../js/utils';
2022-06-12 12:09:50 +02:00
import style from "./RegexView.module.scss";
2022-06-12 14:40:48 +02:00
import { BsTrashFill } from "react-icons/bs"
2022-06-12 16:44:54 +02:00
import YesNoModal from '../YesNoModal';
import FilterTypeSelector from '../FilterTypeSelector';
2022-06-12 12:09:50 +02:00
function RegexView({ regexInfo }:{ regexInfo:RegexFilter }) {
2022-06-12 14:40:48 +02:00
2022-06-12 16:44:54 +02:00
const mode_string = regexInfo.mode === "C"? "C -> S":
regexInfo.mode === "S"? "S -> C":
regexInfo.mode === "B"? "S <-> C": "🤔"
2022-06-12 14:40:48 +02:00
let regex_expr = getHumanReadableRegex(regexInfo.regex);
let exact_regex = true;
if (regex_expr.length>=4 && regex_expr.startsWith(".*") && regex_expr.endsWith(".*")){
regex_expr = regex_expr.substring(2,regex_expr.length-2)
exact_regex = false;
}
2022-06-12 16:44:54 +02:00
const [deleteModal, setDeleteModal] = useState(false);
2022-06-13 10:59:05 +02:00
const deleteRegex = () => {
deleteregex(regexInfo.id).then(res => {
if(!res){
okNotify(`Regex ${regex_expr} deleted successfully!`,`Regex '${regex_expr}' ID:${regexInfo.id} has been deleted!`)
}else{
errorNotify(`Regex ${regex_expr} deleation failed!`,`Error: ${res}`)
}
}).catch( err => errorNotify(`Regex ${regex_expr} deleation failed!`,`Error: ${err}`))
}
2022-06-12 12:09:50 +02:00
return <div className={style.box}>
2022-06-12 14:40:48 +02:00
<Grid>
<Grid.Col span={2}>
<Title order={2} style={{color:"#FFF"}}>Regex:</Title>
</Grid.Col>
<Grid.Col span={8}>
<Text className={style.regex_text}> {regex_expr}</Text>
</Grid.Col>
<Grid.Col span={2}>
2022-06-14 22:43:48 +02:00
<Tooltip label="Delete regex" transition="skew-down" transitionDuration={300} transitionTimingFunction="ease" color="red">
<ActionIcon color="red" onClick={()=>setDeleteModal(true)} size="xl" radius="md" variant="filled"><BsTrashFill size={22} /></ActionIcon>
</Tooltip>
</Grid.Col>
2022-06-12 14:40:48 +02:00
<Grid.Col span={2} />
<Grid.Col className='center-flex-row' span={4}>
<Space h="xs" />
2022-06-12 16:44:54 +02:00
<FilterTypeSelector
2022-06-12 14:40:48 +02:00
size="md"
color="gray"
disabled
2022-06-12 16:44:54 +02:00
value={regexInfo.is_blacklist?"blacklist":"whitelist"}
/>
<Space h="md" />
<div className='center-flex'>
<Badge size="md" color="green" variant="filled">Service: {regexInfo.service_id}</Badge>
<Space w="xs" />
<Badge size="md" color="gray" variant="filled">ID: {regexInfo.id}</Badge>
</div>
</Grid.Col>
<Grid.Col style={{width:"100%"}} span={6}>
<Space h="xs" />
<div className='center-flex-row'>
<Badge size="md" color={exact_regex?"grape":"pink"} variant="filled">Match: {exact_regex?"EXACT":"FIND"}</Badge>
2022-06-12 14:40:48 +02:00
<Space h="xs" />
2022-06-12 16:44:54 +02:00
<Badge size="md" color="yellow" variant="filled">Packets filtered: {regexInfo.n_packets}</Badge>
<Space h="xs" />
<Badge size="md" color="blue" variant="filled">Mode: {mode_string}</Badge>
</div>
</Grid.Col>
2022-06-12 14:40:48 +02:00
</Grid>
2022-06-12 16:44:54 +02:00
<YesNoModal
title='Are you sure to delete this regex?'
description={`You are going to delete the regex '${regex_expr}', causing the restart of the firewall if it is active.`}
onClose={()=>setDeleteModal(false)}
2022-06-13 10:59:05 +02:00
action={deleteRegex}
2022-06-12 16:44:54 +02:00
opened={deleteModal}
/>
2022-06-12 12:09:50 +02:00
</div>
}
export default RegexView;