mirror of
https://github.com/binaricat/Netcatty.git
synced 2026-10-09 15:58:34 +00:00
b8c221d112
Reorder and normalize import statements, group icon imports, and add missing utility imports (cn). Fix export/newline formatting and minor type import tweaks. Add ESLint scripts to package.json and update the lockfile.
114 lines
4.4 KiB
TypeScript
114 lines
4.4 KiB
TypeScript
import { ShieldCheck } from 'lucide-react';
|
|
import React from 'react';
|
|
import { Host } from '../types';
|
|
import { DistroAvatar } from './DistroAvatar';
|
|
import { Button } from './ui/button';
|
|
|
|
export interface HostKeyInfo {
|
|
hostname: string;
|
|
port: number;
|
|
keyType: string; // ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, etc.
|
|
fingerprint: string; // SHA256 fingerprint
|
|
publicKey?: string; // Full public key
|
|
}
|
|
|
|
interface KnownHostConfirmDialogProps {
|
|
host: Host;
|
|
hostKeyInfo: HostKeyInfo;
|
|
onClose: () => void;
|
|
onContinue: () => void; // Continue without adding to known hosts
|
|
onAddAndContinue: () => void; // Add to known hosts and continue
|
|
}
|
|
|
|
const KnownHostConfirmDialog: React.FC<KnownHostConfirmDialogProps> = ({
|
|
host,
|
|
hostKeyInfo,
|
|
onClose,
|
|
onContinue,
|
|
onAddAndContinue,
|
|
}) => {
|
|
return (
|
|
<div className="flex flex-col items-center justify-center h-full p-8 max-w-2xl mx-auto">
|
|
{/* Header with host info */}
|
|
<div className="flex items-center gap-3 mb-6">
|
|
<DistroAvatar host={host} fallback={host.label.slice(0, 2).toUpperCase()} className="h-12 w-12" />
|
|
<div>
|
|
<h2 className="text-base font-semibold">{host.label}</h2>
|
|
<p className="text-xs text-muted-foreground font-mono">
|
|
SSH {host.hostname}:{host.port || 22}
|
|
</p>
|
|
</div>
|
|
<Button variant="outline" size="sm" className="ml-4">
|
|
Show logs
|
|
</Button>
|
|
</div>
|
|
|
|
{/* Progress indicator */}
|
|
<div className="flex items-center gap-3 w-full max-w-md mb-8">
|
|
<div className="h-8 w-8 rounded-full bg-primary text-primary-foreground flex items-center justify-center">
|
|
<div className="h-2 w-2 rounded-full bg-primary-foreground" />
|
|
</div>
|
|
<div className="flex-1 h-0.5 bg-primary" />
|
|
<div className="h-8 w-8 rounded-full bg-primary/20 border-2 border-primary text-primary flex items-center justify-center">
|
|
<ShieldCheck size={14} />
|
|
</div>
|
|
<div className="flex-1 h-0.5 bg-muted" />
|
|
<div className="h-8 w-8 rounded-full bg-muted text-muted-foreground flex items-center justify-center text-xs font-mono">
|
|
{'>_'}
|
|
</div>
|
|
</div>
|
|
|
|
{/* Warning message */}
|
|
<div className="text-center mb-6">
|
|
<h3 className="text-lg font-semibold text-amber-500 mb-2">
|
|
Are you sure you want to connect?
|
|
</h3>
|
|
<p className="text-sm text-muted-foreground">
|
|
The authenticity of <span className="font-mono font-medium text-foreground">{hostKeyInfo.hostname}</span> can not be established.
|
|
</p>
|
|
</div>
|
|
|
|
{/* Fingerprint info */}
|
|
<div className="w-full max-w-md space-y-3 mb-8">
|
|
<div className="flex items-center gap-2 text-sm">
|
|
<span className="text-muted-foreground">{hostKeyInfo.keyType} fingerprint is SHA256:</span>
|
|
</div>
|
|
<div className="bg-secondary/80 rounded-lg p-3 border border-border/60">
|
|
<code className="text-sm font-mono text-foreground break-all">
|
|
{hostKeyInfo.fingerprint}
|
|
</code>
|
|
</div>
|
|
<p className="text-sm text-muted-foreground">
|
|
Do you want to add it to the list of known hosts?
|
|
</p>
|
|
</div>
|
|
|
|
{/* Action buttons */}
|
|
<div className="flex items-center gap-3">
|
|
<Button
|
|
variant="secondary"
|
|
className="min-w-[100px]"
|
|
onClick={onClose}
|
|
>
|
|
Close
|
|
</Button>
|
|
<Button
|
|
variant="outline"
|
|
className="min-w-[100px]"
|
|
onClick={onContinue}
|
|
>
|
|
Continue
|
|
</Button>
|
|
<Button
|
|
className="min-w-[140px]"
|
|
onClick={onAddAndContinue}
|
|
>
|
|
Add and continue
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default KnownHostConfirmDialog;
|