import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Tooltip, } from "@mui/material"; import React from "react"; import { ServerApi } from "../api/ServerApi"; import { NewToken, TokenWithSecret, TokensApi } from "../api/TokensApi"; import { useAlert } from "../hooks/context_providers/AlertDialogProvider"; import { useLoadingMessage } from "../hooks/context_providers/LoadingMessageProvider"; import { checkConstraint } from "../utils/FormUtils"; import { CheckboxInput } from "../widgets/forms/CheckboxInput"; import { TextInput } from "../widgets/forms/TextInput"; const SECS_IN_DAY = 3600 * 24; export function CreateTokenDialog(p: { open: boolean; onClose: () => void; onCreated: (t: TokenWithSecret) => void; }): React.ReactElement { const alert = useAlert(); const loadingMessage = useLoadingMessage(); const [newTokenUndef, setNewToken] = React.useState(); const newToken = newTokenUndef ?? { name: "", ip_net: undefined, max_inactivity: 3600 * 24 * 90, read_only: false, right_account: false, right_file: false, right_auth: false, right_inbox: false, right_movement: false, right_stats: false, right_backup: false, }; const clearForm = () => { setNewToken(undefined); }; const cancel = () => { p.onClose(); clearForm(); }; const nameErr = checkConstraint( ServerApi.Config.constraints.token_name, newToken.name ); const isValid = nameErr === undefined; const submit = async () => { try { loadingMessage.show("Creating token..."); const token = await TokensApi.Create(newToken); clearForm(); p.onCreated(token); } catch (e) { console.error(e); alert(`Failed to create token ! ${e}`); } finally { loadingMessage.hide(); } }; const updateRightsForMobileApp = () => { setNewToken({ ...newToken, read_only: false, right_account: false, right_movement: false, right_file: true, right_auth: true, right_inbox: true, right_stats: false, right_backup: false, }); }; return ( New token { setNewToken({ ...newToken, name: v ?? "", }); }} size={ServerApi.Config.constraints.token_name} /> { setNewToken({ ...newToken, ip_net: v ?? "", }); }} size={ServerApi.Config.constraints.token_ip_net} /> { setNewToken({ ...newToken, max_inactivity: Number(i) * SECS_IN_DAY, }); }} size={{ min: ServerApi.Config.constraints.token_max_inactivity.min / SECS_IN_DAY, max: ServerApi.Config.constraints.token_max_inactivity.max / SECS_IN_DAY, }} /> { setNewToken({ ...newToken, read_only: v, }); }} />
{ setNewToken({ ...newToken, right_account: v, }); }} />
{ setNewToken({ ...newToken, right_movement: v, }); }} />
{ setNewToken({ ...newToken, right_inbox: v, }); }} />
{ setNewToken({ ...newToken, right_file: v, }); }} />
{ setNewToken({ ...newToken, right_auth: v, }); }} />
{ setNewToken({ ...newToken, right_stats: v, }); }} />
{ setNewToken({ ...newToken, right_backup: v, }); }} />
); }