fix: lint
parent
9b66bb4fe2
commit
bbc9e6422e
|
@ -1,8 +1,8 @@
|
||||||
import { WebauthnDevice } from "@root/models/Webauthn";
|
import { WebauthnDevice } from "@root/models/Webauthn";
|
||||||
|
|
||||||
import { WebauthnDevicesPath } from "./Api";
|
import { WebauthnDevicesPath } from "./Api";
|
||||||
import { Get } from "./Client";
|
import { Get } from "./Client";
|
||||||
|
|
||||||
|
|
||||||
// getWebauthnDevices returns the list of webauthn devices for the authenticated user.
|
// getWebauthnDevices returns the list of webauthn devices for the authenticated user.
|
||||||
export async function getWebauthnDevices(): Promise<WebauthnDevice[]> {
|
export async function getWebauthnDevices(): Promise<WebauthnDevice[]> {
|
||||||
return Get<WebauthnDevice[]>(WebauthnDevicesPath);
|
return Get<WebauthnDevice[]>(WebauthnDevicesPath);
|
||||||
|
|
|
@ -1,28 +1,36 @@
|
||||||
import { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogProps, DialogTitle, TextField } from "@mui/material";
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
interface Props extends DialogProps {};
|
import {
|
||||||
|
Button,
|
||||||
|
Dialog,
|
||||||
|
DialogActions,
|
||||||
|
DialogContent,
|
||||||
|
DialogContentText,
|
||||||
|
DialogProps,
|
||||||
|
DialogTitle,
|
||||||
|
TextField,
|
||||||
|
} from "@mui/material";
|
||||||
|
|
||||||
|
interface Props extends DialogProps {}
|
||||||
|
|
||||||
export default function AddSecurityKeyDialog(props: Props) {
|
export default function AddSecurityKeyDialog(props: Props) {
|
||||||
const handleAddClick = () => {
|
const handleAddClick = () => {
|
||||||
if (props.onClose) {
|
if (props.onClose) {
|
||||||
props.onClose({}, "backdropClick");
|
props.onClose({}, "backdropClick");
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
const handleCancelClick = () => {
|
const handleCancelClick = () => {
|
||||||
if (props.onClose) {
|
if (props.onClose) {
|
||||||
props.onClose({}, "backdropClick");
|
props.onClose({}, "backdropClick");
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Dialog {...props}>
|
<Dialog {...props}>
|
||||||
<DialogTitle>Add new Security Key</DialogTitle>
|
<DialogTitle>Add new Security Key</DialogTitle>
|
||||||
<DialogContent>
|
<DialogContent>
|
||||||
<DialogContentText>
|
<DialogContentText>Provide the details for the new security key.</DialogContentText>
|
||||||
Provide the details for the new security key.
|
|
||||||
</DialogContentText>
|
|
||||||
<TextField
|
<TextField
|
||||||
autoFocus
|
autoFocus
|
||||||
margin="dense"
|
margin="dense"
|
||||||
|
|
|
@ -1,11 +1,36 @@
|
||||||
import React, { useEffect, useState } from "react";
|
import React, { useEffect, useState } from "react";
|
||||||
|
|
||||||
import { AppBar, Box, Button, Drawer, Grid, IconButton, List, ListItem, ListItemButton, ListItemIcon, ListItemText, Paper, Stack, Switch, Table, TableBody, TableCell, TableHead, TableRow, Toolbar, Tooltip, Typography } from "@mui/material";
|
import DeleteIcon from "@mui/icons-material/Delete";
|
||||||
import SystemSecurityUpdateGoodIcon from '@mui/icons-material/SystemSecurityUpdateGood';
|
import EditIcon from "@mui/icons-material/Edit";
|
||||||
import DeleteIcon from '@mui/icons-material/Delete';
|
import SystemSecurityUpdateGoodIcon from "@mui/icons-material/SystemSecurityUpdateGood";
|
||||||
import EditIcon from '@mui/icons-material/Edit';
|
import {
|
||||||
import { getWebauthnDevices } from "@root/services/UserWebauthnDevices";
|
AppBar,
|
||||||
|
Box,
|
||||||
|
Button,
|
||||||
|
Drawer,
|
||||||
|
Grid,
|
||||||
|
IconButton,
|
||||||
|
List,
|
||||||
|
ListItem,
|
||||||
|
ListItemButton,
|
||||||
|
ListItemIcon,
|
||||||
|
ListItemText,
|
||||||
|
Paper,
|
||||||
|
Stack,
|
||||||
|
Switch,
|
||||||
|
Table,
|
||||||
|
TableBody,
|
||||||
|
TableCell,
|
||||||
|
TableHead,
|
||||||
|
TableRow,
|
||||||
|
Toolbar,
|
||||||
|
Tooltip,
|
||||||
|
Typography,
|
||||||
|
} from "@mui/material";
|
||||||
|
|
||||||
import { WebauthnDevice } from "@root/models/Webauthn";
|
import { WebauthnDevice } from "@root/models/Webauthn";
|
||||||
|
import { getWebauthnDevices } from "@root/services/UserWebauthnDevices";
|
||||||
|
|
||||||
import AddSecurityKeyDialog from "./AddSecurityDialog";
|
import AddSecurityKeyDialog from "./AddSecurityDialog";
|
||||||
|
|
||||||
interface Props {}
|
interface Props {}
|
||||||
|
@ -17,22 +42,22 @@ export default function SettingsView(props: Props) {
|
||||||
const [addKeyOpen, setAddKeyOpen] = useState<boolean>(false);
|
const [addKeyOpen, setAddKeyOpen] = useState<boolean>(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
(async function() {
|
(async function () {
|
||||||
const devices = await getWebauthnDevices();
|
const devices = await getWebauthnDevices();
|
||||||
setWebauthnDevices(devices);
|
setWebauthnDevices(devices);
|
||||||
})()
|
})();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleKeyClose = () => {
|
const handleKeyClose = () => {
|
||||||
setAddKeyOpen(false);
|
setAddKeyOpen(false);
|
||||||
}
|
};
|
||||||
|
|
||||||
const handleAddKeyButtonClick = () => {
|
const handleAddKeyButtonClick = () => {
|
||||||
setAddKeyOpen(true);
|
setAddKeyOpen(true);
|
||||||
}
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box sx={{ display: 'flex' }}>
|
<Box sx={{ display: "flex" }}>
|
||||||
<AppBar position="fixed" sx={{ zIndex: (theme) => theme.zIndex.drawer + 1 }}>
|
<AppBar position="fixed" sx={{ zIndex: (theme) => theme.zIndex.drawer + 1 }}>
|
||||||
<Toolbar variant="dense">
|
<Toolbar variant="dense">
|
||||||
<Typography style={{ flexGrow: 1 }}>Settings</Typography>
|
<Typography style={{ flexGrow: 1 }}>Settings</Typography>
|
||||||
|
@ -43,11 +68,11 @@ export default function SettingsView(props: Props) {
|
||||||
sx={{
|
sx={{
|
||||||
width: drawerWidth,
|
width: drawerWidth,
|
||||||
flexShrink: 0,
|
flexShrink: 0,
|
||||||
[`& .MuiDrawer-paper`]: { width: drawerWidth, boxSizing: 'border-box' },
|
[`& .MuiDrawer-paper`]: { width: drawerWidth, boxSizing: "border-box" },
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Toolbar variant="dense" />
|
<Toolbar variant="dense" />
|
||||||
<Box sx={{ overflow: 'auto' }}>
|
<Box sx={{ overflow: "auto" }}>
|
||||||
<List>
|
<List>
|
||||||
<ListItem disablePadding>
|
<ListItem disablePadding>
|
||||||
<ListItemButton selected={true}>
|
<ListItemButton selected={true}>
|
||||||
|
@ -67,7 +92,9 @@ export default function SettingsView(props: Props) {
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12}>
|
<Grid item xs={12}>
|
||||||
<Stack spacing={1} direction="row">
|
<Stack spacing={1} direction="row">
|
||||||
<Button color="primary" variant="contained" onClick={handleAddKeyButtonClick}>Add</Button>
|
<Button color="primary" variant="contained" onClick={handleAddKeyButtonClick}>
|
||||||
|
Add
|
||||||
|
</Button>
|
||||||
</Stack>
|
</Stack>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12}>
|
<Grid item xs={12}>
|
||||||
|
@ -83,15 +110,26 @@ export default function SettingsView(props: Props) {
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
{webauthnDevices ? webauthnDevices.map((x, idx) => {
|
{webauthnDevices
|
||||||
|
? webauthnDevices.map((x, idx) => {
|
||||||
return (
|
return (
|
||||||
<TableRow key={x.description}>
|
<TableRow key={x.description}>
|
||||||
<TableCell>{x.description}</TableCell>
|
<TableCell>{x.description}</TableCell>
|
||||||
<TableCell><Switch defaultChecked={false} size="small" /></TableCell>
|
<TableCell>
|
||||||
<TableCell><Typography>{(false) ? "<ADATE>" : "Not enabled"}</Typography></TableCell>
|
<Switch defaultChecked={false} size="small" />
|
||||||
|
</TableCell>
|
||||||
|
<TableCell>
|
||||||
|
<Typography>{false ? "<ADATE>" : "Not enabled"}</Typography>
|
||||||
|
</TableCell>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<Tooltip title={x.public_key}>
|
<Tooltip title={x.public_key}>
|
||||||
<div style={{overflow: "hidden", textOverflow: "ellipsis", width: '300px'}}>
|
<div
|
||||||
|
style={{
|
||||||
|
overflow: "hidden",
|
||||||
|
textOverflow: "ellipsis",
|
||||||
|
width: "300px",
|
||||||
|
}}
|
||||||
|
>
|
||||||
<Typography noWrap>{x.public_key}</Typography>
|
<Typography noWrap>{x.public_key}</Typography>
|
||||||
</div>
|
</div>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
@ -107,8 +145,9 @@ export default function SettingsView(props: Props) {
|
||||||
</Stack>
|
</Stack>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
)
|
);
|
||||||
}) : null}
|
})
|
||||||
|
: null}
|
||||||
</TableBody>
|
</TableBody>
|
||||||
</Table>
|
</Table>
|
||||||
</Paper>
|
</Paper>
|
||||||
|
|
|
@ -58,6 +58,13 @@ export default defineConfig(({ mode }) => {
|
||||||
port: 3000,
|
port: 3000,
|
||||||
open: false,
|
open: false,
|
||||||
},
|
},
|
||||||
plugins: [/* eslintPlugin({ cache: false }) */, htmlPlugin(), istanbulPlugin, react(), svgr(), tsconfigPaths()],
|
plugins: [
|
||||||
|
,
|
||||||
|
/* eslintPlugin({ cache: false }) */ htmlPlugin(),
|
||||||
|
istanbulPlugin,
|
||||||
|
react(),
|
||||||
|
svgr(),
|
||||||
|
tsconfigPaths(),
|
||||||
|
],
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue