import { useState } from 'react'; import { Management, button, control } from '@/pages/management/shared'; import { profileJson } from '@/lib/profile-json'; import { createOperationKey } from '@/lib/operation-key'; type Plan = {approval_id:string;requested_by:number;second_user_id:number;reason:string;expires_at:string;consumed:boolean;expired:boolean;code_current:boolean;can_confirm:boolean;mfa_confirmed_in_session:boolean;hash:string;target:{database:string;port:number}}; export default function BootstrapConfirmation(plan:Plan) { const [key] = useState(createOperationKey); const [reason,setReason] = useState(''); const [confirmed,setConfirmed] = useState(false); const [busy,setBusy] = useState(false); const [done,setDone] = useState(plan.consumed); const [message,setMessage] = useState(''); async function confirm() { setBusy(true);setMessage(''); try { await profileJson('/management/profile-install/bootstrap/'+plan.approval_id+'/confirm',{hash:plan.hash,confirm:confirmed,idempotency_key:key,reason}); setDone(true);setMessage('Dupla inicializada por confirmação cruzada. Apenas estas duas contas foram designadas; nenhuma flag foi alterada. Inicie uma nova sessão.'); } catch(error) {setMessage(error instanceof Error?error.message:'Resposta indisponível. Recupere este pedido antes de repetir.');} finally {setBusy(false);} } return

Base {plan.target.database}:{plan.target.port}

Pedido apresentado pela conta {plan.requested_by}; confirmação reservada à conta {plan.second_user_id}.

Fundamento do pedido: {plan.reason}

Expira em {plan.expires_at}.

O pedido não atribui privilégios. A confirmação é uma operação distinta, com MFA e auditoria. Não altera a regra de substituição posterior.

{plan.expired &&

Pedido expirado. Prepare novo pedido autorizado.

} {!plan.code_current &&

Revisão ou destino alterados. Este pedido não pode ser confirmado.

} {!plan.mfa_confirmed_in_session &&

Conclua MFA nesta sessão antes de confirmar.

} {!plan.can_confirm && !done &&

Esta conta pode consultar, mas não confirmar o pedido.

}