[WIFI-13815] Added fingerprint to service configuration

Signed-off-by: Charles <charles.bourque96@gmail.com>
This commit is contained in:
Charles
2024-06-17 16:04:56 -04:00
parent 63967fe07b
commit 10fb8f9d7e
5 changed files with 103 additions and 15 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "wlan-cloud-owprov-ui",
"version": "3.1.0(2)",
"version": "3.1.0(7)",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "wlan-cloud-owprov-ui",
"version": "3.1.0(2)",
"version": "3.1.0(7)",
"license": "ISC",
"dependencies": {
"@chakra-ui/anatomy": "^2.1.1",

View File

@@ -1,6 +1,6 @@
{
"name": "wlan-cloud-owprov-ui",
"version": "3.1.0(2)",
"version": "3.1.0(7)",
"description": "",
"main": "index.tsx",
"scripts": {

View File

@@ -0,0 +1,71 @@
import * as React from 'react';
import { Heading, SimpleGrid } from '@chakra-ui/react';
import Card from 'components/Card';
import CardBody from 'components/Card/CardBody';
import CardHeader from 'components/Card/CardHeader';
import NumberField from 'components/FormFields/NumberField';
import SelectField from 'components/FormFields/SelectField';
type Props = {
isEditing: boolean;
};
const modeOptions = [
{
value: 'always',
label: 'Always',
},
{
value: 'polled',
label: 'Polled',
},
{
value: 'final',
label: 'Final',
},
{
value: 'raw-data',
label: 'Raw Data',
},
];
const Fingerprint = ({ isEditing }: Props) => (
<Card variant="widget" mb={4}>
<CardHeader>
<Heading size="md" borderBottom="1px solid">
Fingerprinting
</Heading>
</CardHeader>
<CardBody>
<SimpleGrid minChildWidth="200px" spacing="20px" mb={2} mt={2} w="100%">
<SelectField
name="configuration.fingerprint.mode"
label="mode"
options={modeOptions}
isRequired
isDisabled={!isEditing}
/>
<NumberField
name="configuration.fingerprint.minimumAge"
label="minimumAge"
isRequired
isDisabled={!isEditing}
/>
<NumberField
name="configuration.fingerprint.maximumAge"
label="maximumAge"
isRequired
isDisabled={!isEditing}
/>
<NumberField
name="configuration.fingerprint.periodicity"
label="periodicity"
isRequired
isDisabled={!isEditing}
/>
</SimpleGrid>
</CardBody>
</Card>
);
export default Fingerprint;

View File

@@ -12,6 +12,7 @@ import AirtimePolicies from './AirtimePolicies';
import DataPlane from './DataPlane';
import DhcpRelay from './DhcpRelay';
import FacebookWifi from './FacebookWifi';
import Fingerprint from './Fingerprint';
import Gps from './Gps';
import Http from './Http';
import Ieee8021x from './Ieee8021x';
@@ -126,6 +127,7 @@ const ServicesSection = ({ editing, setSection, sectionInformation, removeSub })
'data-plane',
'dhcp-relay',
'facebook-wifi',
'fingerprint',
'gps',
'http',
'ieee8021x',
@@ -150,6 +152,7 @@ const ServicesSection = ({ editing, setSection, sectionInformation, removeSub })
{isSubSectionActive('data-plane') && <DataPlane editing={editing} />}
{isSubSectionActive('dhcp-relay') && <DhcpRelay isEditing={editing} />}
{isSubSectionActive('facebook-wifi') && <FacebookWifi editing={editing} />}
{isSubSectionActive('fingerprint') && <Fingerprint isEditing={editing} />}
{isSubSectionActive('gps') && <Gps editing={editing} />}
{isSubSectionActive('http') && <Http editing={editing} />}
{isSubSectionActive('ieee8021x') && <Ieee8021x editing={editing} />}

View File

@@ -1,6 +1,17 @@
import { object, number, string, array, bool } from 'yup';
import { testFqdnHostname, testIpv4, testLength, testUcMac } from 'constants/formTests';
export const SERVICES_FINGERPRINT_SCHEMA = (t, useDefault = false) => {
const shape = object().shape({
mode: string().required(t('form.required')).oneOf(['always', 'polled', 'final', 'raw-data']).default('always'),
minimumAge: number().required(t('form.required')).moreThan(-1).integer().default(60),
maximumAge: number().required(t('form.required')).moreThan(-1).integer().default(60),
periodicity: number().required(t('form.required')).moreThan(-1).integer().default(600),
});
return useDefault ? shape : shape.nullable().default(undefined);
};
export const SERVICES_DHCP_RELAY_VLAN_SCHEMA = (t, useDefault = false) => {
const shape = object().shape({
vlan: number().required(t('form.required')).moreThan(-1).lessThan(4097).integer().default(1),
@@ -34,8 +45,8 @@ export const SERVICES_CLASSIFIER_DNS_SCHEMA = (t, useDefault = false) => {
export const SERVICES_CLASSIFIER_PORTS_SCHEMA = (t, useDefault = false) => {
const shape = object().shape({
protocol: string().required(t('form.required')).default('any'),
port: number().required(t('form.required')).positive().lessThan(4050).integer().default(1812),
'range-end': number().required(t('form.required')).positive().lessThan(4050).integer().default(1813),
port: number().required(t('form.required')).positive().lessThan(65536).integer().default(1812),
'range-end': number().required(t('form.required')).positive().lessThan(65536).integer().default(1813),
reclassify: bool().default(true),
});
@@ -58,7 +69,7 @@ export const SERVICES_USER_SCHEMA = (t, useDefault = false) => {
.test('services.ieee8021x.user.mac.length', t('form.invalid_mac_uc'), testUcMac)
.default(''),
'user-name': string().required(t('form.required')).default(''),
'vlan-id': number().required(t('form.required')).moreThan(-1).lessThan(4097).integer().default(1),
'vlan-id': number().required(t('form.required')).moreThan(-1).lessThan(65536).integer().default(1),
password: string()
.required(t('form.required'))
.test('services.ieee8021x.user.password.length', t('form.min_max_string', { min: 8, max: 63 }), (val) =>
@@ -73,7 +84,7 @@ export const SERVICES_USER_SCHEMA = (t, useDefault = false) => {
export const SERVICES_REALMS_SCHEMA = (t, useDefault = false) => {
const shape = object().shape({
realm: string().required(t('form.required')).default('*'),
port: number().required(t('form.required')).moreThan(-1).lessThan(65535).integer().default(22),
port: number().required(t('form.required')).moreThan(-1).lessThan(65536).integer().default(22),
secret: string().required(t('form.required')).default(''),
'auto-discover': bool().default(false),
'use-local-certificates': bool().default(false),
@@ -109,7 +120,7 @@ export const SERVICES_GPS_SCHEMA = (t, useDefault = false) => {
export const SERVICES_SSH_SCHEMA = (t, useDefault = false) => {
const shape = object().shape({
port: number().required(t('form.required')).moreThan(-1).lessThan(65535).integer().default(22),
port: number().required(t('form.required')).moreThan(-1).lessThan(65536).integer().default(22),
'password-authentication': bool().default(true),
'authorized-keys': array()
.of(string())
@@ -144,7 +155,7 @@ export const SERVICES_RTTY_SCHEMA = (t, useDefault = false) => {
.required(t('form.required'))
.test('rtty.host.value', t('form.invalid_fqdn_host'), testFqdnHostname)
.default(''),
port: number().required(t('form.required')).moreThan(-1).lessThan(65535).integer().default(5912),
port: number().required(t('form.required')).moreThan(-1).lessThan(65536).integer().default(5912),
token: string()
.required(t('form.required'))
.test('rtty.token.length', t('form.min_max_string', { min: 32, max: 32 }), (val) =>
@@ -158,16 +169,16 @@ export const SERVICES_RTTY_SCHEMA = (t, useDefault = false) => {
export const SERVICES_LOG_SCHEMA = (t, useDefault = false) => {
const shape = object().shape({
host: string().required(t('form.required')).test('log.host.value', t('form.invalid_cidr'), testIpv4).default(''),
port: number().required(t('form.required')).moreThan(-1).lessThan(65535).integer().default(5912),
port: number().required(t('form.required')).moreThan(-1).lessThan(65536).integer().default(5912),
proto: string().required(t('form.required')).default('udp'),
size: number().required(t('form.required')).moreThan(31).lessThan(65535).integer().default(1000),
size: number().required(t('form.required')).moreThan(31).lessThan(65536).integer().default(1000),
});
return useDefault ? shape : shape.nullable().default(undefined);
};
export const SERVICES_HTTP_SCHEMA = (t, useDefault = false) => {
const shape = object().shape({
'http-port': number().required(t('form.required')).moreThan(0).lessThan(65535).integer().default(80),
'http-port': number().required(t('form.required')).moreThan(0).lessThan(65536).integer().default(80),
});
return useDefault ? shape : shape.nullable().default(undefined);
@@ -208,8 +219,8 @@ export const SERVICES_ONLINE_CHECK_SCHEMA = (t, useDefault = false) => {
const shape = object().shape({
'ping-hosts': array().of(string()).required(t('form.required')).min(1, t('form.required')).default([]),
'download-hosts': array().of(string()).required(t('form.required')).min(1, t('form.required')).default([]),
'check-interval': number().required(t('form.required')).moreThan(-1).lessThan(65535).integer().default(60),
'check-threshold': number().required(t('form.required')).moreThan(-1).lessThan(65535).integer().default(1),
'check-interval': number().required(t('form.required')).moreThan(-1).lessThan(65536).integer().default(60),
'check-threshold': number().required(t('form.required')).moreThan(-1).lessThan(65536).integer().default(1),
action: array().of(string()).required(t('form.required')).min(1, t('form.required')).default([]),
});
@@ -292,7 +303,7 @@ export const SERVICES_FACEBOOK_WIFI_SCHEMA = (t, useDefault = false) => {
export const SERVICES_AIRTIME_POLICIES_SCHEMA = (t, useDefault = false) => {
const shape = object().shape({
'dns-match': array().of(string()).required(t('form.required')).min(1, t('form.required')).default([]),
'dns-weight': number().required(t('form.required')).moreThan(-1).lessThan(65535).integer().default(256),
'dns-weight': number().required(t('form.required')).moreThan(-1).lessThan(65536).integer().default(256),
});
return useDefault ? shape : shape.nullable().default(undefined);
@@ -323,6 +334,7 @@ export const SERVICES_SCHEMA = (t, useDefault = false) =>
ieee8021x: SERVICES_IEEE8021X_SCHEMA(t, useDefault),
gps: SERVICES_GPS_SCHEMA(t, useDefault),
'dhcp-relay': SERVICES_DHCP_RELAY_SCHEMA(t, useDefault),
fingerprint: SERVICES_FINGERPRINT_SCHEMA(t, useDefault),
}),
});
@@ -366,6 +378,8 @@ export const getSubSectionDefaults = (t, sub) => {
return SERVICES_GPS_SCHEMA(t, true).cast();
case 'dhcp-relay':
return SERVICES_DHCP_RELAY_SCHEMA(t, true).cast();
case 'fingerprint':
return SERVICES_FINGERPRINT_SCHEMA(t, true).cast();
default:
return null;
}