feat: implement SSH key management

- Add backend API endpoints for SSH key CRUD (POST, GET, DELETE)
- Implement Ed25519 key generation with Fernet-encrypted private keys
- Add frontend SSH keys page with generate, list, and delete functionality
- Include copy-to-clipboard for public keys
- Add responsive CSS styles for key cards
- Register ssh_keys router in main.py
- Add basic auth tests for SSH key endpoints

Quality gates: ruff ✓, mypy ✓, typecheck ✓, lint ✓
This commit is contained in:
Fusion
2026-05-18 14:44:21 +02:00
parent be81aa1c8b
commit a441ea2fac
24 changed files with 500 additions and 369 deletions
+26
View File
@@ -0,0 +1,26 @@
import { apiClient } from "./client";
export interface SSHKey {
id: string;
name: string;
public_key: string;
created_at: string;
}
export interface SSHKeyCreate {
name: string;
}
export async function listSSHKeys(): Promise<SSHKey[]> {
const response = await apiClient.get<SSHKey[]>("/ssh-keys");
return response.data;
}
export async function createSSHKey(data: SSHKeyCreate): Promise<SSHKey> {
const response = await apiClient.post<SSHKey>("/ssh-keys", data);
return response.data;
}
export async function deleteSSHKey(keyId: string): Promise<void> {
await apiClient.delete(`/ssh-keys/${keyId}`);
}