mirror of
https://github.com/getpaseo/paseo.git
synced 2026-07-29 12:01:31 +00:00
fix(desktop): tighten browser shortcut validation
This commit is contained in:
@@ -146,6 +146,20 @@ describe("parseBrowserShortcutInput", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("keeps browser identities exact", () => {
|
||||
expect(
|
||||
parseBrowserShortcutInput({
|
||||
browserId: " browser-1 ",
|
||||
key: "t",
|
||||
code: "KeyT",
|
||||
meta: false,
|
||||
control: true,
|
||||
shift: false,
|
||||
alt: false,
|
||||
}),
|
||||
).toMatchObject({ browserId: " browser-1 " });
|
||||
});
|
||||
|
||||
it.each([
|
||||
{
|
||||
name: "a missing browser identity",
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
import { describe, expect, test } from "vitest";
|
||||
import { classifyBrowserReservedShortcut, parseBrowserKeyboardPolicy } from "./policy.js";
|
||||
import {
|
||||
classifyBrowserReservedShortcut,
|
||||
parseBrowserKeyboardPolicy,
|
||||
parseBrowserShortcutInput,
|
||||
} from "./policy.js";
|
||||
|
||||
describe("browser keyboard policy", () => {
|
||||
test("classifies shell-owned browser shortcuts for the current platform modifier", () => {
|
||||
@@ -71,4 +75,35 @@ describe("browser keyboard policy", () => {
|
||||
});
|
||||
expect(parseBrowserKeyboardPolicy({ prefixes: [{ code: "KeyB", control: true }] })).toBeNull();
|
||||
});
|
||||
|
||||
test("rejects a false code fallback instead of treating it as absent", () => {
|
||||
expect(
|
||||
parseBrowserKeyboardPolicy({
|
||||
prefixes: [
|
||||
{
|
||||
alt: false,
|
||||
code: "KeyB",
|
||||
codeFallback: false,
|
||||
control: true,
|
||||
meta: false,
|
||||
shift: false,
|
||||
},
|
||||
],
|
||||
}),
|
||||
).toBeNull();
|
||||
});
|
||||
|
||||
test("keeps browser identities exact", () => {
|
||||
expect(
|
||||
parseBrowserShortcutInput({
|
||||
alt: false,
|
||||
browserId: " browser-1 ",
|
||||
code: "KeyB",
|
||||
control: true,
|
||||
key: "b",
|
||||
meta: false,
|
||||
shift: false,
|
||||
}),
|
||||
).toMatchObject({ browserId: " browser-1 " });
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
export interface BrowserShortcutPrefix {
|
||||
alt: boolean;
|
||||
code: string;
|
||||
codeFallback?: boolean;
|
||||
codeFallback?: true;
|
||||
control: boolean;
|
||||
key?: string;
|
||||
meta: boolean;
|
||||
@@ -44,7 +44,7 @@ function parsePrefix(value: unknown): BrowserShortcutPrefix | null {
|
||||
typeof value.shift !== "boolean" ||
|
||||
(value.key !== undefined && typeof value.key !== "string") ||
|
||||
(value.shiftedKey !== undefined && typeof value.shiftedKey !== "string") ||
|
||||
(value.codeFallback !== undefined && typeof value.codeFallback !== "boolean") ||
|
||||
(value.codeFallback !== undefined && value.codeFallback !== true) ||
|
||||
(value.repeat !== undefined && value.repeat !== false)
|
||||
) {
|
||||
return null;
|
||||
@@ -52,7 +52,7 @@ function parsePrefix(value: unknown): BrowserShortcutPrefix | null {
|
||||
return {
|
||||
alt: value.alt,
|
||||
code: value.code,
|
||||
...(typeof value.codeFallback === "boolean" ? { codeFallback: value.codeFallback } : {}),
|
||||
...(value.codeFallback === true ? { codeFallback: true } : {}),
|
||||
control: value.control,
|
||||
...(typeof value.key === "string" ? { key: value.key.toLowerCase() } : {}),
|
||||
meta: value.meta,
|
||||
@@ -83,7 +83,7 @@ export function parseBrowserShortcutInput(value: unknown): BrowserShortcutInput
|
||||
}
|
||||
if (
|
||||
typeof value.browserId !== "string" ||
|
||||
value.browserId.trim().length === 0 ||
|
||||
value.browserId.length === 0 ||
|
||||
typeof value.key !== "string" ||
|
||||
typeof value.code !== "string" ||
|
||||
typeof value.alt !== "boolean" ||
|
||||
@@ -95,7 +95,7 @@ export function parseBrowserShortcutInput(value: unknown): BrowserShortcutInput
|
||||
}
|
||||
return {
|
||||
alt: value.alt,
|
||||
browserId: value.browserId.trim(),
|
||||
browserId: value.browserId,
|
||||
code: value.code,
|
||||
control: value.control,
|
||||
key: value.key,
|
||||
|
||||
Reference in New Issue
Block a user