Add API tokens support (#9)
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Make it possible to create token authorized to query predetermined set of routes. Reviewed-on: #9 Co-authored-by: Pierre HUBERT <pierre.git@communiquons.org> Co-committed-by: Pierre HUBERT <pierre.git@communiquons.org>
This commit is contained in:
58
virtweb_frontend/src/dialogs/CreatedTokenDialog.tsx
Normal file
58
virtweb_frontend/src/dialogs/CreatedTokenDialog.tsx
Normal file
@ -0,0 +1,58 @@
|
||||
import {
|
||||
Button,
|
||||
Dialog,
|
||||
DialogActions,
|
||||
DialogContent,
|
||||
DialogTitle,
|
||||
Typography,
|
||||
} from "@mui/material";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import { APITokenURL, CreatedAPIToken } from "../api/TokensApi";
|
||||
import { CopyToClipboard } from "../widgets/CopyToClipboard";
|
||||
import { InlineCode } from "../widgets/InlineCode";
|
||||
|
||||
export function CreatedTokenDialog(p: {
|
||||
createdToken: CreatedAPIToken;
|
||||
}): React.ReactElement {
|
||||
const navigate = useNavigate();
|
||||
|
||||
const close = () => {
|
||||
navigate(APITokenURL(p.createdToken.token));
|
||||
};
|
||||
return (
|
||||
<Dialog open>
|
||||
<DialogTitle>Token successfully created</DialogTitle>
|
||||
<DialogContent>
|
||||
<Typography>
|
||||
Your token was successfully created. You need now to copy the private
|
||||
key, as it will be technically impossible to recover it after closing
|
||||
this dialog.
|
||||
</Typography>
|
||||
|
||||
<InfoBlock label="Token ID" value={p.createdToken.token.id} />
|
||||
<InfoBlock label="Key algorithm" value={p.createdToken.priv_key.alg} />
|
||||
<InfoBlock label="Private key" value={p.createdToken.priv_key.priv} />
|
||||
</DialogContent>
|
||||
<DialogActions>
|
||||
<Button onClick={close} color="error">
|
||||
I copied the key, close this dialog
|
||||
</Button>
|
||||
</DialogActions>
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
|
||||
function InfoBlock(
|
||||
p: React.PropsWithChildren<{ label: string; value: string }>
|
||||
): React.ReactElement {
|
||||
return (
|
||||
<div
|
||||
style={{ display: "flex", flexDirection: "column", margin: "20px 10px" }}
|
||||
>
|
||||
<Typography variant="overline">{p.label}</Typography>
|
||||
<CopyToClipboard content={p.value}>
|
||||
<InlineCode>{p.value}</InlineCode>
|
||||
</CopyToClipboard>
|
||||
</div>
|
||||
);
|
||||
}
|
Reference in New Issue
Block a user