diff --git a/src/services/backup-uploader.ts b/src/services/backup-uploader.ts index 5ef10ed..ff369e7 100644 --- a/src/services/backup-uploader.ts +++ b/src/services/backup-uploader.ts @@ -46,7 +46,10 @@ function encodePathSegments(path: string): string { } function trimSlashes(value: string): string { - return String(value || '').replace(/^\/+|\/+$/g, ''); + let next = String(value || ''); + while (next.startsWith('/')) next = next.slice(1); + while (next.endsWith('/')) next = next.slice(0, -1); + return next; } function buildJoinedPath(...segments: string[]): string { @@ -138,7 +141,7 @@ function buildCanonicalQueryString(url: URL): string { return aKey.localeCompare(bKey); }); return params - .map(([key, value]) => `${encodeURIComponent(key).replace(/%20/g, '%20')}=${encodeURIComponent(value).replace(/%20/g, '%20')}`) + .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) .join('&'); } diff --git a/webapp/src/components/VaultPage.tsx b/webapp/src/components/VaultPage.tsx index a64c6a2..af8e951 100644 --- a/webapp/src/components/VaultPage.tsx +++ b/webapp/src/components/VaultPage.tsx @@ -5,34 +5,24 @@ import VaultEditor from '@/components/vault/VaultEditor'; import VaultListPanel from '@/components/vault/VaultListPanel'; import VaultSidebar from '@/components/vault/VaultSidebar'; import { - CREATE_TYPE_OPTIONS, MOBILE_LAYOUT_QUERY, - TOTP_PERIOD_SECONDS, - TOTP_RING_CIRCUMFERENCE, VAULT_LIST_OVERSCAN, VAULT_LIST_ROW_HEIGHT, VAULT_SORT_STORAGE_KEY, cipherTypeKey, cipherTypeLabel, - copyToClipboard, createEmptyDraft, creationTimeValue, draftFromCipher, firstCipherUri, firstPasskeyCreationTime, - formatAttachmentSize, - formatHistoryTime, - formatTotp, - maskSecret, - openUri, - parseFieldType, sortTimeValue, type SidebarFilter, type VaultSortMode, } from '@/components/vault/vault-page-helpers'; import { calcTotpNow } from '@/lib/crypto'; import { computeSshFingerprint, generateDefaultSshKeyMaterial } from '@/lib/ssh'; -import { ChevronLeft, X } from 'lucide-preact'; +import { ChevronLeft } from 'lucide-preact'; import type { Cipher, CustomFieldType, Folder, VaultDraft, VaultDraftField } from '@/lib/types'; import { t } from '@/lib/i18n';