fix: Refactor passphrase handling: remove auto-responded keys tracking and related logic
This commit is contained in:
40
App.tsx
40
App.tsx
@@ -196,13 +196,6 @@ async function loadDefaultKeyPassphrase(keyPath: string): Promise<string | null>
|
||||
return (await decryptField(enc)) ?? null;
|
||||
}
|
||||
|
||||
async function removeDefaultKeyPassphrase(keyPath: string): Promise<void> {
|
||||
const store = localStorageAdapter.read<Record<string, string>>(STORAGE_KEY_DEFAULT_KEY_PASSPHRASES);
|
||||
if (!store) return;
|
||||
delete store[keyPath];
|
||||
localStorageAdapter.write(STORAGE_KEY_DEFAULT_KEY_PASSPHRASES, store);
|
||||
}
|
||||
|
||||
function App({ settings }: { settings: SettingsState }) {
|
||||
const { t } = useI18n();
|
||||
|
||||
@@ -226,8 +219,6 @@ function App({ settings }: { settings: SettingsState }) {
|
||||
const [keyboardInteractiveQueue, setKeyboardInteractiveQueue] = useState<KeyboardInteractiveRequest[]>([]);
|
||||
// Passphrase request queue for encrypted SSH keys
|
||||
const [passphraseQueue, setPassphraseQueue] = useState<PassphraseRequest[]>([]);
|
||||
// Track keys that were auto-responded in this session (to detect wrong saved passphrases)
|
||||
const autoRespondedKeysRef = useRef<Set<string>>(new Set());
|
||||
|
||||
const {
|
||||
theme,
|
||||
@@ -1011,26 +1002,10 @@ function App({ settings }: { settings: SettingsState }) {
|
||||
const unsubscribe = bridge.onPassphraseRequest(async (request) => {
|
||||
console.log('[App] Passphrase request received:', request);
|
||||
|
||||
// Check if this key was already auto-responded in this session
|
||||
// If so, the saved passphrase was wrong - remove it and show modal
|
||||
if (autoRespondedKeysRef.current.has(request.keyPath)) {
|
||||
console.log('[App] Key was auto-responded before but failed, removing saved passphrase');
|
||||
autoRespondedKeysRef.current.delete(request.keyPath);
|
||||
await removeDefaultKeyPassphrase(request.keyPath);
|
||||
setPassphraseQueue(prev => [...prev, {
|
||||
requestId: request.requestId,
|
||||
keyPath: request.keyPath,
|
||||
keyName: request.keyName,
|
||||
hostname: request.hostname,
|
||||
}]);
|
||||
return;
|
||||
}
|
||||
|
||||
// Try to load saved passphrase
|
||||
// Try to load saved passphrase and auto-respond
|
||||
const saved = await loadDefaultKeyPassphrase(request.keyPath);
|
||||
if (saved) {
|
||||
console.log('[App] Auto-responding with saved passphrase for:', request.keyPath);
|
||||
autoRespondedKeysRef.current.add(request.keyPath);
|
||||
void bridge.respondPassphrase?.(request.requestId, saved, false);
|
||||
return;
|
||||
}
|
||||
@@ -1056,15 +1031,12 @@ function App({ settings }: { settings: SettingsState }) {
|
||||
void bridge.respondPassphrase(requestId, passphrase, false);
|
||||
}
|
||||
|
||||
const request = passphraseQueue.find((r: PassphraseRequest) => r.requestId === requestId);
|
||||
|
||||
// Save passphrase if requested
|
||||
if (remember) {
|
||||
const request = passphraseQueue.find(r => r.requestId === requestId);
|
||||
if (request?.keyPath) {
|
||||
console.log('[App] Saving passphrase for:', request.keyPath);
|
||||
void saveDefaultKeyPassphrase(request.keyPath, passphrase);
|
||||
// Clear from auto-responded tracking since user manually entered it
|
||||
autoRespondedKeysRef.current.delete(request.keyPath);
|
||||
}
|
||||
if (remember && request?.keyPath) {
|
||||
console.log('[App] Saving passphrase for:', request.keyPath);
|
||||
void saveDefaultKeyPassphrase(request.keyPath, passphrase);
|
||||
}
|
||||
|
||||
setPassphraseQueue(prev => prev.filter(r => r.requestId !== requestId));
|
||||
|
||||
Reference in New Issue
Block a user