@lemoncat7/dsh-ssh 1.11.6 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ export declare function ConfigBackupPanel(): JSX.Element;
2
+ //# sourceMappingURL=config-backup-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-backup-panel.d.ts","sourceRoot":"","sources":["../src/config-backup-panel.tsx"],"names":[],"mappings":"AAQA,wBAAgB,iBAAiB,IAAI,GAAG,CAAC,OAAO,CAY/C"}
@@ -0,0 +1,74 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { api } from './client-api.js';
4
+ import { Dialog, Field, PasswordInput, errorMessage } from './ui-components.js';
5
+ import { t } from './i18n.js';
6
+ import { useSshLocale } from './use-ssh-locale.js';
7
+ import { refreshWorkspace } from './use-workspace-refresh.js';
8
+ const countKeys = ['profiles', 'ftpProfiles', 'remoteProjects', 'credentialEntries', 'proxyEntries', 'commands', 'groupProxies'];
9
+ export function ConfigBackupPanel() {
10
+ useSshLocale();
11
+ const [mode, setMode] = useState();
12
+ const [notice, setNotice] = useState('');
13
+ return _jsxs("section", { className: "dsh-ssh-settings-section dsh-ssh-backup-section", "aria-labelledby": "ssh-backup-title", children: [_jsx("div", { className: "dsh-ssh-settings-section-heading", children: _jsxs("span", { children: [_jsx("strong", { id: "ssh-backup-title", children: t('backup.title') }), _jsx("small", { children: t('backup.description') })] }) }), _jsxs("div", { className: "dsh-ssh-backup-content", children: [_jsx("p", { children: t('backup.scope') }), _jsxs("div", { className: "dsh-ssh-backup-actions", children: [_jsx("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: () => { setNotice(''); setMode('import'); }, children: t('backup.import') }), _jsx("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: () => { setNotice(''); setMode('export'); }, children: t('backup.export') })] }), _jsx("small", { children: t('backup.excluded') }), notice && _jsx("p", { className: "dsh-ssh-inline-success", role: "status", children: notice })] }), mode && _jsx(BackupDialog, { mode: mode, onClose: () => setMode(undefined), onDone: () => { setMode(undefined); setNotice(mode === 'export' ? t('backup.exported') : t('backup.imported')); if (mode === 'import')
14
+ refreshWorkspace(); } })] });
15
+ }
16
+ function BackupDialog({ mode, onClose, onDone }) {
17
+ const [passphrase, setPassphrase] = useState('');
18
+ const [confirmation, setConfirmation] = useState('');
19
+ const [file, setFile] = useState();
20
+ const [preview, setPreview] = useState();
21
+ const [busy, setBusy] = useState(false);
22
+ const [error, setError] = useState('');
23
+ const exporting = mode === 'export';
24
+ const labels = { profiles: t('backup.profiles'), ftpProfiles: t('backup.ftpProfiles'), remoteProjects: t('backup.remoteProjects'), credentialEntries: t('backup.credentialEntries'), proxyEntries: t('backup.proxyEntries'), commands: t('backup.commands'), groupProxies: t('backup.groupProxies') };
25
+ const submit = async (event) => {
26
+ event.preventDefault();
27
+ if (busy)
28
+ return;
29
+ setError('');
30
+ setBusy(true);
31
+ try {
32
+ if (exporting) {
33
+ if (passphrase !== confirmation)
34
+ throw new Error(t('backup.mismatch'));
35
+ const { content } = await api('/config-backup/export', { method: 'POST', body: JSON.stringify({ passphrase }) });
36
+ const url = URL.createObjectURL(new Blob([content], { type: 'application/json' }));
37
+ const link = document.createElement('a');
38
+ link.href = url;
39
+ link.download = `dsh-ssh-backup-${new Date().toISOString().slice(0, 10)}.json`;
40
+ document.body.append(link);
41
+ link.click();
42
+ link.remove();
43
+ setTimeout(() => URL.revokeObjectURL(url), 60_000);
44
+ onDone();
45
+ }
46
+ else if (preview) {
47
+ await api('/config-backup/import', { method: 'POST', body: JSON.stringify({ content: preview.content, passphrase }) });
48
+ onDone();
49
+ }
50
+ else {
51
+ if (!file)
52
+ throw new Error(t('backup.chooseFile'));
53
+ if (file.size > 1_048_576)
54
+ throw new Error(t('backup.fileLimit'));
55
+ const content = await file.text();
56
+ const counts = await api('/config-backup/preview', { method: 'POST', body: JSON.stringify({ content, passphrase }) });
57
+ setPreview({ content, counts });
58
+ }
59
+ }
60
+ catch (reason) {
61
+ setError(errorMessage(reason));
62
+ }
63
+ finally {
64
+ setBusy(false);
65
+ }
66
+ };
67
+ return _jsx(Dialog, { title: exporting ? t('backup.export') : t('backup.import'), subtitle: exporting ? t('backup.passwordHint') : t('backup.importHint'), onClose: onClose, dismissible: !busy, children: _jsxs("form", { className: "dsh-ssh-form dsh-ssh-backup-form", onSubmit: event => { void submit(event); }, children: [!preview && _jsxs("fieldset", { disabled: busy, className: "dsh-ssh-backup-fields", children: [!exporting && _jsx(Field, { label: t('backup.file'), hint: t('backup.fileHint'), children: _jsx("input", { type: "file", accept: ".json,application/json", required: true, onChange: event => { setFile(event.target.files?.[0]); setError(''); } }) }), _jsx(Field, { label: t('backup.password'), hint: t('backup.passwordLength'), children: _jsx(PasswordInput, { required: true, minLength: 8, maxLength: 256, autoComplete: exporting ? 'new-password' : 'current-password', value: passphrase, onChange: event => setPassphrase(event.target.value) }) }), exporting && _jsx(Field, { label: t('backup.confirmPassword'), children: _jsx(PasswordInput, { required: true, minLength: 8, maxLength: 256, autoComplete: "new-password", value: confirmation, onChange: event => setConfirmation(event.target.value) }) })] }), preview && _jsxs("div", { children: [_jsx("h3", { children: t('backup.preview') }), _jsx("dl", { className: "dsh-ssh-backup-counts", children: countKeys.map(key => _jsxs("div", { children: [_jsx("dt", { children: labels[key] }), _jsx("dd", { children: preview.counts[key] ?? 0 })] }, key)) }), _jsx("p", { className: "dsh-ssh-backup-hint", children: t('backup.copyHint') })] }), error && _jsx("p", { className: "dsh-ssh-inline-error", role: "alert", children: error }), _jsxs("div", { className: "dsh-ssh-dialog-actions", children: [_jsx("button", { type: "button", className: "dsh-ssh-secondary-button", disabled: busy, onClick: () => { if (preview) {
68
+ setPreview(undefined);
69
+ setError('');
70
+ }
71
+ else
72
+ onClose(); }, children: preview ? t('backup.back') : t('client.cancel') }), _jsx("button", { type: "submit", className: "dsh-ssh-primary-button", disabled: busy, children: busy ? t('backup.processing') : exporting ? t('backup.download') : preview ? t('backup.confirmImport') : t('backup.read') })] })] }) });
73
+ }
74
+ //# sourceMappingURL=config-backup-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-backup-panel.js","sourceRoot":"","sources":["../src/config-backup-panel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { SshStore } from './store.js';
2
+ import type { SshCredentialVault } from './credentials.js';
3
+ export declare function exportConfiguration(store: SshStore, vault: SshCredentialVault, passphrase: unknown): Promise<string>;
4
+ export declare function previewConfiguration(content: unknown, passphrase: unknown): Promise<Record<string, number>>;
5
+ export declare function importConfiguration(store: SshStore, vault: SshCredentialVault, content: unknown, passphrase: unknown): Promise<void>;
6
+ //# sourceMappingURL=config-backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-backup.d.ts","sourceRoot":"","sources":["../src/config-backup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAkB1D,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAU1H;AAqBD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAIjH;AACD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D1I"}
@@ -0,0 +1,142 @@
1
+ import { createCipheriv, createDecipheriv, randomBytes, randomUUID, scrypt } from 'node:crypto';
2
+ import { promisify } from 'node:util';
3
+ import { createEncryptedPortableSnapshot, decryptPortableSecrets, parsePortableSnapshot } from './gist-sync.js';
4
+ import { groupProxyId } from './group-proxy.js';
5
+ const derive = promisify(scrypt);
6
+ const FORMAT = 'dsh-ssh-backup';
7
+ const invalid = (message) => Object.assign(new Error(message), { status: 400 });
8
+ const LIMIT = 1_048_576;
9
+ const collections = ['profiles', 'ftpProfiles', 'remoteProjects', 'credentialEntries', 'proxyEntries', 'commands', 'groupProxies'];
10
+ const emptyTombstones = () => ({ profiles: {}, ftpProfiles: {}, remoteProjects: {}, credentialEntries: {}, proxyEntries: {}, commands: {}, groupProxies: {} });
11
+ function password(value) {
12
+ if (typeof value !== 'string' || value.length < 8 || value.length > 256)
13
+ throw invalid('备份密码需要 8–256 个字符');
14
+ return value;
15
+ }
16
+ function bounded(value) {
17
+ if (typeof value !== 'string' || Buffer.byteLength(value) > LIMIT)
18
+ throw invalid('备份文件不能超过 1 MB');
19
+ return value;
20
+ }
21
+ export async function exportConfiguration(store, vault, passphrase) {
22
+ const pass = password(passphrase), revision = store.workspaceRevision();
23
+ const snapshot = await createEncryptedPortableSnapshot(store.snapshot(), randomUUID(), emptyTombstones(), vault, pass);
24
+ if (revision !== store.workspaceRevision())
25
+ throw new Error('配置刚刚发生变化,请重新导出');
26
+ // Authenticate and encrypt the entire file, including addresses and configuration metadata.
27
+ const salt = randomBytes(16), iv = randomBytes(12);
28
+ const cipher = createCipheriv('aes-256-gcm', await derive(pass, salt, 32), iv);
29
+ const plaintext = bounded(JSON.stringify(snapshot));
30
+ const ciphertext = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()]);
31
+ return bounded(JSON.stringify({ format: FORMAT, version: 1, salt: salt.toString('base64'), iv: iv.toString('base64'), tag: cipher.getAuthTag().toString('base64'), ciphertext: ciphertext.toString('base64') }));
32
+ }
33
+ async function decode(content, passphrase) {
34
+ const pass = password(passphrase);
35
+ let file;
36
+ try {
37
+ file = JSON.parse(bounded(content));
38
+ }
39
+ catch {
40
+ throw invalid('备份文件格式不正确,或文件超过 1 MB');
41
+ }
42
+ if (!file || file.format !== FORMAT || file.version !== 1)
43
+ throw invalid('不是受支持的 SSH 配置备份文件');
44
+ const bytes = (key, length) => {
45
+ if (typeof file[key] !== 'string')
46
+ throw invalid('备份文件格式不正确');
47
+ const value = Buffer.from(file[key], 'base64');
48
+ if (!value.length || value.toString('base64') !== file[key] || length !== undefined && value.length !== length)
49
+ throw invalid('备份文件格式不正确');
50
+ return value;
51
+ };
52
+ const salt = bytes('salt', 16), iv = bytes('iv', 12), tag = bytes('tag', 16), ciphertext = bytes('ciphertext');
53
+ let plaintext;
54
+ try {
55
+ const decipher = createDecipheriv('aes-256-gcm', await derive(pass, salt, 32), iv);
56
+ decipher.setAuthTag(tag);
57
+ plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString('utf8');
58
+ }
59
+ catch {
60
+ throw invalid('密码不正确,或备份文件已损坏');
61
+ }
62
+ return parsePortableSnapshot(plaintext);
63
+ }
64
+ export async function previewConfiguration(content, passphrase) {
65
+ const snapshot = await decode(content, passphrase);
66
+ await decryptPortableSecrets(snapshot, password(passphrase));
67
+ return Object.fromEntries(collections.map(name => [name, snapshot.collections[name]?.length ?? 0]));
68
+ }
69
+ export async function importConfiguration(store, vault, content, passphrase) {
70
+ const snapshot = await decode(content, passphrase);
71
+ const secrets = await decryptPortableSecrets(snapshot, password(passphrase));
72
+ const items = snapshot.collections;
73
+ // A fresh namespace preserves existing data and keeps every imported reference within its copy.
74
+ const maps = Object.fromEntries(collections.map(name => [name, new Map((items[name] ?? []).map(item => [item.id, `import-${randomUUID()}`]))]));
75
+ const ref = (name, id) => {
76
+ const result = maps[name].get(id);
77
+ if (!result)
78
+ throw invalid('备份中存在无效引用');
79
+ return result;
80
+ };
81
+ const groupNames = new Map();
82
+ const group = (name) => {
83
+ if (!groupNames.has(name))
84
+ groupNames.set(name, `${name.slice(0, 38)} (import ${randomBytes(8).toString('hex')})`);
85
+ return groupNames.get(name);
86
+ };
87
+ for (const profile of [...items.profiles, ...items.ftpProfiles]) {
88
+ if (profile.credentialId)
89
+ profile.credentialId = ref('credentialEntries', profile.credentialId);
90
+ if (profile.proxy.type === 'saved')
91
+ profile.proxy.proxyId = ref('proxyEntries', profile.proxy.proxyId);
92
+ if (profile.proxy.type === 'jump')
93
+ profile.proxy.profileIds = profile.proxy.profileIds.map(id => ref('profiles', id));
94
+ if (profile.group)
95
+ profile.group = group(profile.group);
96
+ }
97
+ for (const project of items.remoteProjects)
98
+ project.profileId = ref('profiles', project.profileId);
99
+ for (const entry of items.groupProxies ?? []) {
100
+ entry.name = group(entry.name);
101
+ maps.groupProxies.set(entry.id, groupProxyId(entry.name));
102
+ if (entry.proxyId)
103
+ entry.proxyId = ref('proxyEntries', entry.proxyId);
104
+ }
105
+ const scopes = {
106
+ 'ssh-profile': { name: 'profiles', write: vault.replace.bind(vault), remove: vault.delete.bind(vault) },
107
+ 'ftp-profile': { name: 'ftpProfiles', write: vault.replaceFtp.bind(vault), remove: vault.deleteFtp.bind(vault) },
108
+ 'vault-entry': { name: 'credentialEntries', write: vault.replaceEntry.bind(vault), remove: vault.deleteEntry.bind(vault) },
109
+ 'proxy-entry': { name: 'proxyEntries', write: vault.replaceProxyEntry.bind(vault), remove: vault.deleteProxyEntry.bind(vault) },
110
+ };
111
+ const cleanup = [];
112
+ try {
113
+ for (const record of snapshot.secrets) {
114
+ const scope = scopes[record.scope], id = ref(scope.name, record.id);
115
+ cleanup.push(() => scope.remove(id));
116
+ await scope.write(id, secrets[`${record.scope}:${record.id}`]);
117
+ }
118
+ const now = Date.now();
119
+ for (const name of collections)
120
+ for (const item of items[name] ?? []) {
121
+ item.id = ref(name, item.id);
122
+ item.createdAt = now;
123
+ item.updatedAt = now;
124
+ }
125
+ // Validate the remapped graph before publishing it to readers or automatic sync.
126
+ parsePortableSnapshot(JSON.stringify({ ...snapshot, secrets: [] }));
127
+ await store.update(state => {
128
+ state.profiles.push(...items.profiles);
129
+ state.ftpProfiles.push(...items.ftpProfiles);
130
+ state.remoteProjects.push(...items.remoteProjects);
131
+ state.credentialEntries.push(...items.credentialEntries);
132
+ state.proxyEntries.push(...items.proxyEntries);
133
+ state.commands = [...(state.commands ?? []), ...(items.commands ?? [])];
134
+ state.groupProxies = [...(state.groupProxies ?? []), ...(items.groupProxies ?? [])];
135
+ });
136
+ }
137
+ catch (error) {
138
+ await Promise.allSettled(cleanup.map(remove => remove()));
139
+ throw error;
140
+ }
141
+ }
142
+ //# sourceMappingURL=config-backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-backup.js","sourceRoot":"","sources":["../src/config-backup.ts"],"names":[],"mappings":"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"}
@@ -130,13 +130,15 @@ export declare class GistSyncService {
130
130
  }>;
131
131
  view(): Promise<GistSyncView>;
132
132
  configure(value: unknown): Promise<GistSyncView>;
133
- testConnection(): Promise<{
133
+ testConnection(accountOnly?: boolean): Promise<{
134
134
  login: string;
135
135
  gistId?: string;
136
136
  }>;
137
137
  startOAuth(): Promise<GitHubDeviceFlowStart>;
138
138
  pollOAuth(id: string): Promise<GitHubDeviceFlowStatus>;
139
139
  disconnectGitHub(): Promise<GistSyncView>;
140
+ /** Serialize file transfers with cloud sync so a download cannot replace a fresh import. */
141
+ withConfigurationTransfer<T>(operation: () => Promise<T>): Promise<T>;
140
142
  sync(automatic?: boolean): Promise<GistSyncView>;
141
143
  private performSync;
142
144
  private client;
@@ -1 +1 @@
1
- {"version":3,"file":"gist-sync.d.ts","sourceRoot":"","sources":["../src/gist-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gist-sync.d.ts","sourceRoot":"","sources":["../src/gist-sync.ts"],"names":[],"mappings":"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"}
package/lib/gist-sync.js CHANGED
@@ -150,7 +150,7 @@ export class GistSyncService {
150
150
  githubHttp;
151
151
  metadata;
152
152
  persistQueue = Promise.resolve();
153
- syncQueue = Promise.resolve(undefined);
153
+ syncQueue = Promise.resolve();
154
154
  unsubscribe;
155
155
  autoTimer;
156
156
  pullTimer;
@@ -263,12 +263,12 @@ export class GistSyncService {
263
263
  this.scheduleAutoSync(500);
264
264
  return this.view();
265
265
  }
266
- async testConnection() {
266
+ async testConnection(accountOnly = false) {
267
267
  const generation = this.authGeneration;
268
268
  try {
269
269
  const client = await this.client();
270
270
  const identity = await client.identify();
271
- const gistId = this.metadata.settings.gistId;
271
+ const gistId = accountOnly ? undefined : this.metadata.settings.gistId;
272
272
  if (gistId !== undefined) {
273
273
  const gist = await client.get(gistId);
274
274
  if (gist.version !== undefined)
@@ -300,6 +300,12 @@ export class GistSyncService {
300
300
  await this.persist();
301
301
  return this.view();
302
302
  }
303
+ /** Serialize file transfers with cloud sync so a download cannot replace a fresh import. */
304
+ withConfigurationTransfer(operation) {
305
+ const pending = this.syncQueue.catch(() => undefined).then(operation);
306
+ this.syncQueue = pending;
307
+ return pending;
308
+ }
303
309
  sync(automatic = false) {
304
310
  const operation = this.syncQueue.catch(() => undefined).then(() => automatic && this.metadata.authPaused ? this.view() : this.performSync());
305
311
  this.syncQueue = operation;