Skip to content

Commit f56c2d0

Browse files
link_utils: exposing whitelisted protocols to user settings
This commit exposes the whitelisted protocol list to the user settings.json file. This allows user to extend or modify the list of linkifiers that are directly opened by the os instead of being opened via the redirect html method.
1 parent 86882c0 commit f56c2d0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+767
-187
lines changed

app/common/config-schemata.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export const configSchemata = {
3636
useManualProxy: z.boolean(),
3737
useProxy: z.boolean(),
3838
useSystemProxy: z.boolean(),
39+
whitelistedProtocols: z.string().array(),
3940
};
4041

4142
export const enterpriseConfigSchemata = {

app/common/config-util.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import {DataError} from "node-json-db/dist/lib/Errors";
77
import type {z} from "zod";
88
import {app, dialog} from "zulip:remote";
99

10-
import {configSchemata} from "./config-schemata.js";
11-
import * as EnterpriseUtil from "./enterprise-util.js";
12-
import Logger from "./logger-util.js";
10+
import {configSchemata} from "./config-schemata.ts";
11+
import * as EnterpriseUtil from "./enterprise-util.ts";
12+
import Logger from "./logger-util.ts";
1313

1414
export type Config = {
1515
[Key in keyof typeof configSchemata]: z.output<(typeof configSchemata)[Key]>;

app/common/dnd-util.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import process from "node:process";
22

33
import type {z} from "zod";
44

5-
import type {dndSettingsSchemata} from "./config-schemata.js";
6-
import * as ConfigUtil from "./config-util.js";
5+
import type {dndSettingsSchemata} from "./config-schemata.ts";
6+
import * as ConfigUtil from "./config-util.ts";
77

88
export type DndSettings = {
99
[Key in keyof typeof dndSettingsSchemata]: z.output<

app/common/enterprise-util.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import process from "node:process";
55
import {z} from "zod";
66
import {dialog} from "zulip:remote";
77

8-
import {enterpriseConfigSchemata} from "./config-schemata.js";
9-
import Logger from "./logger-util.js";
8+
import {enterpriseConfigSchemata} from "./config-schemata.ts";
9+
import Logger from "./logger-util.ts";
1010

1111
type EnterpriseConfig = {
1212
[Key in keyof typeof enterpriseConfigSchemata]: z.output<

app/common/link-util.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,20 @@ import fs from "node:fs";
33
import os from "node:os";
44
import path from "node:path";
55

6-
import {html} from "./html.js";
6+
import * as ConfigUtil from "./config-util.ts";
7+
import {html} from "./html.ts";
8+
9+
/* Fetches the current protocolLaunchers from settings.json */
10+
const whitelistedProtocols = ConfigUtil.getConfigItem("whitelistedProtocols", [
11+
"http:",
12+
"https:",
13+
"mailto:",
14+
"tel:",
15+
"sip:",
16+
]);
717

818
export async function openBrowser(url: URL): Promise<void> {
9-
if (["http:", "https:", "mailto:"].includes(url.protocol)) {
19+
if (whitelistedProtocols.includes(url.protocol)) {
1020
await shell.openExternal(url.href);
1121
} else {
1222
// For security, indirect links to non-whitelisted protocols

app/common/logger-util.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import process from "node:process";
55

66
import {app} from "zulip:remote";
77

8-
import {initSetUp} from "./default-util.js";
8+
import {initSetUp} from "./default-util.ts";
99

1010
type LoggerOptions = {
1111
file?: string;

app/common/translation-util.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import path from "node:path";
22

33
import i18n from "i18n";
44

5-
import * as ConfigUtil from "./config-util.js";
6-
import {publicPath} from "./paths.js";
5+
import * as ConfigUtil from "./config-util.ts";
6+
import {publicPath} from "./paths.ts";
77

88
i18n.configure({
99
directory: path.join(publicPath, "translations/"),

app/common/typed-ipc.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import type {DndSettings} from "./dnd-util.js";
2-
import type {MenuProperties, ServerConfig} from "./types.js";
1+
import type {DndSettings} from "./dnd-util.ts";
2+
import type {MenuProperties, ServerConfig} from "./types.ts";
33

44
export type MainMessage = {
55
"clear-app-settings": () => void;

app/main/autoupdater.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import {
99
autoUpdater,
1010
} from "electron-updater";
1111

12-
import * as ConfigUtil from "../common/config-util.js";
13-
import * as t from "../common/translation-util.js";
12+
import * as ConfigUtil from "../common/config-util.ts";
13+
import * as t from "../common/translation-util.ts";
1414

15-
import {linuxUpdateNotification} from "./linuxupdater.js"; // Required only in case of linux
15+
import {linuxUpdateNotification} from "./linuxupdater.ts"; // Required only in case of linux
1616

1717
let quitting = false;
1818

app/main/badge-settings.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import {nativeImage} from "electron/common";
22
import {type BrowserWindow, app} from "electron/main";
33
import process from "node:process";
44

5-
import * as ConfigUtil from "../common/config-util.js";
5+
import * as ConfigUtil from "../common/config-util.ts";
66

7-
import {send} from "./typed-ipc-main.js";
7+
import {send} from "./typed-ipc-main.ts";
88

99
function showBadgeCount(messageCount: number, mainWindow: BrowserWindow): void {
1010
if (process.platform === "win32") {

0 commit comments

Comments
 (0)