mirror of
https://github.com/eugeny/tabby
synced 2026-09-21 12:36:17 +00:00
warn before opening external app-specific URIs
Package-Build / Lint (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Docs / build (push) Has been cancelled
Package-Build / macOS-Build (arm64, aarch64-apple-darwin) (push) Has been cancelled
Package-Build / macOS-Build (x86_64, x86_64-apple-darwin) (push) Has been cancelled
Package-Build / Linux-Build (amd64, x64, ubuntu-24.04, x86_64-unknown-linux-gnu) (push) Has been cancelled
Package-Build / Linux-Build (arm64, arm64, ubuntu-24.04-arm, aarch64-unknown-linux-gnu, aarch64-linux-gnu-) (push) Has been cancelled
Package-Build / Linux-Build (armhf, arm, ubuntu-24.04, arm-unknown-linux-gnueabihf, arm-linux-gnueabihf-) (push) Has been cancelled
Package-Build / Windows-Build (arm64, aarch64-pc-windows-msvc) (push) Has been cancelled
Package-Build / Windows-Build (x64, x86_64-pc-windows-msvc) (push) Has been cancelled
Package-Build / Lint (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Docs / build (push) Has been cancelled
Package-Build / macOS-Build (arm64, aarch64-apple-darwin) (push) Has been cancelled
Package-Build / macOS-Build (x86_64, x86_64-apple-darwin) (push) Has been cancelled
Package-Build / Linux-Build (amd64, x64, ubuntu-24.04, x86_64-unknown-linux-gnu) (push) Has been cancelled
Package-Build / Linux-Build (arm64, arm64, ubuntu-24.04-arm, aarch64-unknown-linux-gnu, aarch64-linux-gnu-) (push) Has been cancelled
Package-Build / Linux-Build (armhf, arm, ubuntu-24.04, arm-unknown-linux-gnueabihf, arm-linux-gnueabihf-) (push) Has been cancelled
Package-Build / Windows-Build (arm64, aarch64-pc-windows-msvc) (push) Has been cancelled
Package-Build / Windows-Build (x64, x86_64-pc-windows-msvc) (push) Has been cancelled
This commit is contained in:
@@ -262,7 +262,7 @@ export abstract class PlatformService {
|
||||
|
||||
abstract getOSRelease (): string
|
||||
abstract getAppVersion (): string
|
||||
abstract openExternal (url: string): void
|
||||
abstract openExternal (url: string): Promise<void>
|
||||
abstract listFonts (): Promise<string[]>
|
||||
abstract setErrorHandler (handler: (_: any) => void): void
|
||||
abstract popupContextMenu (menu: MenuItemOptions[], event?: MouseEvent): void
|
||||
|
||||
@@ -25,6 +25,7 @@ try {
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class ElectronPlatformService extends PlatformService {
|
||||
supportsWindowControls = true
|
||||
private safeExternalSchemes = new Set(['http', 'https', 'ftp', 'mailto'])
|
||||
private configPath: string
|
||||
|
||||
constructor (
|
||||
@@ -140,8 +141,44 @@ export class ElectronPlatformService extends PlatformService {
|
||||
this.electron.shell.showItemInFolder(p)
|
||||
}
|
||||
|
||||
openExternal (url: string): void {
|
||||
this.electron.shell.openExternal(url)
|
||||
async openExternal (url: string): Promise<void> {
|
||||
const scheme = this.getExternalScheme(url)
|
||||
if (scheme && this.safeExternalSchemes.has(scheme)) {
|
||||
await this.electron.shell.openExternal(url)
|
||||
} else {
|
||||
await this.confirmAndOpenExternal(url)
|
||||
}
|
||||
}
|
||||
|
||||
private getExternalScheme (url: string): string | null {
|
||||
try {
|
||||
const protocol = new URL(url.trim()).protocol
|
||||
return protocol ? protocol.replace(':', '').toLowerCase() : null
|
||||
} catch {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
private async confirmAndOpenExternal (url: string): Promise<void> {
|
||||
const scheme = this.getExternalScheme(url)
|
||||
const result = await this.electron.dialog.showMessageBox(
|
||||
this.hostWindow.getWindow(),
|
||||
{
|
||||
type: 'warning',
|
||||
message: this.translate.instant(`Open this app-specific "${scheme}" URI?`),
|
||||
detail: url,
|
||||
buttons: [
|
||||
this.translate.instant('Open'),
|
||||
this.translate.instant('Cancel'),
|
||||
],
|
||||
defaultId: 0,
|
||||
cancelId: 1,
|
||||
},
|
||||
)
|
||||
|
||||
if (result.response === 0) {
|
||||
await this.electron.shell.openExternal(url)
|
||||
}
|
||||
}
|
||||
|
||||
openPath (p: string): void {
|
||||
|
||||
@@ -55,7 +55,7 @@ export class WebPlatformService extends PlatformService {
|
||||
return '1.0'
|
||||
}
|
||||
|
||||
openExternal (url: string): void {
|
||||
async openExternal (url: string): Promise<void> {
|
||||
window.open(url)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user