const VPNConfig = {
create: `${base}create-client/`,
delete: `${base}revoke-client/`,
- index: `${base}clients/`
+ index: `${base}clients/`,
+ availableClients: `${base}available-clients/`
};
export default VPNConfig;
\ No newline at end of file
});
};
+ fetchAvailableClients = () => {
+ return new Promise( async ( resolve ) => {
+ try {
+ const response = await axios.get(`${base_url}${VPNConfig.availableClients}`);
+ resolve(response.data.clients);
+ } catch (error) {
+ resolve(`Error: ${error.response?.data?.error || 'Failed to fetch available clients'}`);
+ }
+ });
+ };
+
createClient = ( data, fetchClients ) => {
return new Promise( async ( resolve ) => {
const { clientName, useStaticIp, staticIp } = data;
const [useStaticIp, setUseStaticIp] = useState(false);
const [revokeClientName, setRevokeClientName] = useState('');
const [clients, setClients] = useState([]);
+ const [availableClients, setAvailableClients] = useState( [] );
const [message, setMessage] = useState('');
const fetchClients = async () => {
await VPNService.fetchClients().then( res => setClients( res ) ).catch( err => setMessage( err ) );
};
+ const fetchAvailableClients = async () => {
+ await VPNService.fetchAvailableClients().then( res => setAvailableClients( res ) ).catch( err => setMessage( err ) );
+ };
+
useEffect( () => {
fetchClients().catch( e => setMessage( e ) );
+ fetchAvailableClients().catch( e => setMessage( e ) );
}, [] );
/*const handleLogin = async (e) => {
<Button type="submit" variant="contained" color="secondary">Revoke Client</Button>
</form>
+ <Typography variant="h5" className="mt-6">Available OpenVPN Clients</Typography>
+ <MaterialReactTable
+ columns={[
+ { accessorKey: 'clientName', header: 'Name' },
+ { accessorKey: 'ip', header: 'IP' },
+ { accessorKey: 'hasCertificate', header: 'Active Certificate' },
+ { accessorFn: row => clients.find( c => c.name === row.clientName ), header: 'Connected' },
+ ]}
+ data={availableClients}
+ />
+
<Typography variant="h5" className="mt-6">Connected OpenVPN Clients</Typography>
<MaterialReactTable
columns={[