mirror of
https://github.com/zulip/zulip-desktop.git
synced 2025-10-25 09:03:42 +00:00
46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import {shell} from "electron";
|
|
import fs from "fs";
|
|
import os from "os";
|
|
import path from "path";
|
|
|
|
import {html} from "../../../common/html";
|
|
|
|
export function isUploadsUrl(server: string, url: URL): boolean {
|
|
return url.origin === server && url.pathname.startsWith("/user_uploads/");
|
|
}
|
|
|
|
export async function openBrowser(url: URL): Promise<void> {
|
|
if (["http:", "https:", "mailto:"].includes(url.protocol)) {
|
|
await shell.openExternal(url.href);
|
|
} else {
|
|
// For security, indirect links to non-whitelisted protocols
|
|
// through a real web browser via a local HTML file.
|
|
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "zulip-redirect-"));
|
|
const file = path.join(dir, "redirect.html");
|
|
fs.writeFileSync(
|
|
file,
|
|
html`<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta http-equiv="Refresh" content="0; url=${url.href}" />
|
|
<title>Redirecting</title>
|
|
<style>
|
|
html {
|
|
font-family: menu, "Helvetica Neue", sans-serif;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<p>Opening <a href="${url.href}">${url.href}</a>…</p>
|
|
</body>
|
|
</html> `.html,
|
|
);
|
|
await shell.openPath(file);
|
|
setTimeout(() => {
|
|
fs.unlinkSync(file);
|
|
fs.rmdirSync(dir);
|
|
}, 15000);
|
|
}
|
|
}
|