Skip to content

Commit ac1247a

Browse files
jonassorgenfreishubham-padia
authored andcommitted
link_utils: exposing whitelisted protocols to user settings
Fixes #1284. Adding config option to set protocols in the config that are whitelisted to be opened directly. The behaviour is documented in docs\howto\customize-link-protocols.md.
1 parent 3956252 commit ac1247a

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
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
export type ConfigSchemata = typeof configSchemata;
4142

app/common/link-util.ts

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

6+
import * as ConfigUtil from "./config-util.ts";
67
import {Html, html} from "./html.ts";
78
import * as t from "./translation-util.ts";
89

10+
const whitelistedProtocols = ConfigUtil.getConfigItem("whitelistedProtocols", [
11+
"http:",
12+
"https:",
13+
"mailto:",
14+
"tel:",
15+
"sip:",
16+
]);
17+
918
export async function openBrowser(url: URL): Promise<void> {
10-
if (["http:", "https:", "mailto:"].includes(url.protocol)) {
19+
if (whitelistedProtocols.includes(url.protocol)) {
1120
await shell.openExternal(url.href);
1221
} else {
1322
// For security, indirect links to non-whitelisted protocols
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Customizing Link Protocols
2+
3+
The Zulip app supports opening certain link protocols directly in their associated system applications. These are known as **whitelisted protocols**.
4+
5+
## Default Whitelisted Protocols
6+
7+
By default, the following protocols are whitelisted:
8+
9+
```
10+
http, https, mailto, tel, sip
11+
```
12+
13+
Links using these protocols are opened directly by the system.
14+
15+
All other protocols are considered potentially unsafe and are therefore opened indirectly—through a local HTML file in your default web browser.
16+
17+
## Extending the Whitelisted Protocols
18+
19+
It is possible to customize the list of whitelisted protocols by editing the `settings.json` file located at: `userdata/Zulip/config/settings.json`
20+
21+
To modify the list, the `whitelistedProtocols` key can be updated. For example:
22+
23+
```json
24+
{
25+
...
26+
"whitelistedProtocols": [
27+
"http:",
28+
"https:",
29+
"mailto:"
30+
]
31+
...
32+
}
33+
```
34+
35+
Note: Each protocol should include the trailing colon (:), e.g., "mailto:" instead of "mailto".

0 commit comments

Comments
 (0)