--- /dev/null
+import { Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField } from '@mui/material';
+import React from 'react';
+
+const SuspendClient = ( { duration, setDuration, open, onClose, onConfirm }) => {
+ return (
+ <Dialog open={ open } onClose={ onClose}>
+ <DialogTitle>Suspend Client</DialogTitle>
+ <DialogContent>
+ <TextField
+ label='Duration of Suspension in miutes'
+ type='number'
+ value={duration}
+ onChange={(e) => setDuration(e.target.value)}
+ fullWidth
+ />
+ </DialogContent>
+ <DialogActions>
+ <Button onClick={onClose}>Cancel</Button>
+ <Button onClick={onConfirm}>Suspend</Button>
+ </DialogActions>
+ </Dialog>
+ );
+};
+export default SuspendClient;
\ No newline at end of file
import React, { createContext, useContext, useEffect, useState } from 'react';
import { VPNService } from '../../services';
-import { ConfirmRevoke, CreateVPNClientDialog } from '../index';
+import { ConfirmRevoke, CreateVPNClientDialog, SuspendClient } from '../index';
const VPNContext = createContext( undefined );
const [createOpen, setCreateOpen] = useState( false );
const [statusOpen, setStatusOpen] = useState( false );
const [serverStatus, setServerStatus] = useState( {} );
+ const [suspendOpen, setSuspendOpen] = useState( false );
+ /** TODO: Change the default time to something more reasonable. */
+ const [duration, setDuration] = useState( 1 );
const fetchServerStatus = async () => {
await VPNService.getServerStatus()
setRevokeOpen( false );
};
+ const handleDisconnect = async () => {
+ setMessage( await VPNService.disconnect() );
+ fetchClients().catch( e => setMessage( e ) );
+ setSuspendOpen( false );
+ };
+
useEffect( () => {
fetchClients().catch( e => setMessage( e ) );
fetchAvailableClients().catch( e => setMessage( e ) );
setCreateOpen,
handleCreateClientSubmit,
handleRevokeClientSubmit,
+ handleDisconnect,
statusOpen,
setStatusOpen,
serverStatus,
- setServerStatus
+ setServerStatus,
+ suspendOpen,
+ setSuspendOpen,
+ duration,
+ setDuration
};
return <VPNContext.Provider value={ value }>
{ createOpen && <CreateVPNClientDialog open={ createOpen }
onClose={ () => setCreateOpen( false ) }
onCreate={ handleCreateClientSubmit }/> }
+ { suspendOpen && <SuspendClient open={ suspendOpen }
+ onClose={ () => setSuspendOpen( false ) }
+ duration={ duration }
+ setDuration={ setDuration }
+ onConfirm={ handleDisconnect }/>}
{ children }</VPNContext.Provider>;
};
import ConfirmRevoke from './VPN/ConfirmRevoke';
import CreateVPNClientDialog from './VPN/CreateVPNClientDialog';
+import SuspendClient from './VPN/SuspendClient';
export * from './VPN/VPNContext';
-export { ConfirmRevoke, CreateVPNClientDialog };
\ No newline at end of file
+export { ConfirmRevoke, CreateVPNClientDialog, SuspendClient };
\ No newline at end of file