@@ -13,8 +13,9 @@ import Alert from '@material-ui/lab/Alert';
1313import { makeStyles } from '@material-ui/core/styles' ;
1414import DeleteIcon from '@material-ui/icons/Delete' ;
1515import VpnKeyIcon from '@material-ui/icons/VpnKey' ;
16- import axios from 'axios' ;
17- import dayjs from 'dayjs' ; // npm i dayjs
16+ import dayjs from 'dayjs' ;
17+
18+ import { getSSHKeys , deleteSSHKey , addSSHKey } from '../../services/ssh' ;
1819
1920const useStyles = makeStyles ( ( theme ) => ( {
2021 root : { padding : theme . spacing ( 3 ) , width : '100%' } ,
@@ -36,8 +37,6 @@ const useStyles = makeStyles((theme) => ({
3637 formField : { marginBottom : theme . spacing ( 2 ) } ,
3738} ) ) ;
3839
39- const API_BASE = `${ import . meta. env . VITE_API_URI } /api/v1/user` ;
40-
4140export default function SSHKeysManager ( { username } ) {
4241 const classes = useStyles ( ) ;
4342
@@ -52,11 +51,8 @@ export default function SSHKeysManager({ username }) {
5251 const loadKeys = useCallback ( async ( ) => {
5352 if ( ! username ) return ;
5453 try {
55- const res = await axios . get ( `${ API_BASE } /${ username } /ssh-keys` , {
56- withCredentials : true ,
57- } ) ;
58- // API now returns [{name,fingerprint,addedAt}]
59- setKeys ( res . data . publicKeys || [ ] ) ;
54+ const data = await getSSHKeys ( username ) ;
55+ setKeys ( data ) ;
6056 } catch ( err ) {
6157 console . error ( err ) ;
6258 setBanner ( { type : 'error' , text : 'Failed to load SSH keys' } ) ;
@@ -71,10 +67,7 @@ export default function SSHKeysManager({ username }) {
7167 const handleDelete = async ( index ) => {
7268 const { fingerprint } = keys [ index ] ;
7369 try {
74- await axios . delete ( `${ API_BASE } /${ username } /ssh-keys/fingerprint` , {
75- data : { fingerprint } ,
76- withCredentials : true ,
77- } ) ;
70+ await deleteSSHKey ( username , fingerprint ) ;
7871 await loadKeys ( ) ;
7972 setBanner ( { type : 'success' , text : 'SSH key removed' } ) ;
8073 } catch ( err ) {
@@ -90,16 +83,12 @@ export default function SSHKeysManager({ username }) {
9083 * Add new public key, then refresh list
9184 * --------------------------------------------------------- */
9285 const handleAddKey = async ( ) => {
93- const key = newKeyValue . trim ( ) ;
86+ const publicKey = newKeyValue . trim ( ) ;
9487 const name = newKeyName . trim ( ) ;
95- if ( ! key || ! name ) return ;
88+ if ( ! publicKey || ! name ) return ;
9689
9790 try {
98- await axios . post (
99- `${ API_BASE } /${ username } /ssh-keys` ,
100- { publicKey : key , name } ,
101- { withCredentials : true } ,
102- ) ;
91+ await addSSHKey ( username , { publicKey, name } ) ;
10392 await loadKeys ( ) ;
10493 setBanner ( { type : 'success' , text : 'SSH key added' } ) ;
10594 setNewKeyValue ( '' ) ;
@@ -116,7 +105,6 @@ export default function SSHKeysManager({ username }) {
116105
117106 return (
118107 < div className = { classes . root } >
119- { /* ---------- Snackbar ---------- */ }
120108 < Snackbar
121109 open = { Boolean ( banner ) }
122110 autoHideDuration = { 4000 }
@@ -169,7 +157,6 @@ export default function SSHKeysManager({ username }) {
169157 </ Paper >
170158 ) ) }
171159
172- { /* ---------- Modal ---------- */ }
173160 < Modal open = { isModalOpen } onClose = { ( ) => setIsModalOpen ( false ) } className = { classes . modal } >
174161 < div className = { classes . modalContent } >
175162 < Typography variant = 'h6' gutterBottom >
0 commit comments