mirror of
https://github.com/streamwall/streamwall.git
synced 2026-01-31 01:12:48 -05:00
Sandbox all browser contexts
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
import { ipcRenderer } from 'electron'
|
|
||||||
import { h, render } from 'preact'
|
import { h, render } from 'preact'
|
||||||
import { useEffect, useState } from 'preact/hooks'
|
import { useEffect, useState } from 'preact/hooks'
|
||||||
import styled from 'styled-components'
|
import styled from 'styled-components'
|
||||||
@@ -27,9 +26,7 @@ function App() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
ipcRenderer.on('state', (ev, state) => {
|
streamwall.onState(setState)
|
||||||
setState(state)
|
|
||||||
})
|
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
const { streams } = state
|
const { streams } = state
|
||||||
|
|||||||
6
src/browser/layerPreload.js
Normal file
6
src/browser/layerPreload.js
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import { ipcRenderer, contextBridge } from 'electron'
|
||||||
|
|
||||||
|
contextBridge.exposeInMainWorld('streamwall', {
|
||||||
|
openDevTools: () => ipcRenderer.send('devtools-overlay'),
|
||||||
|
onState: (handler) => ipcRenderer.on('state', (ev, state) => handler(state)),
|
||||||
|
})
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
import { ipcRenderer } from 'electron'
|
|
||||||
import { h, Fragment, render } from 'preact'
|
import { h, Fragment, render } from 'preact'
|
||||||
import { useEffect, useState } from 'preact/hooks'
|
import { useEffect, useState } from 'preact/hooks'
|
||||||
import { State } from 'xstate'
|
import { State } from 'xstate'
|
||||||
@@ -84,13 +83,11 @@ function App() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
ipcRenderer.on('state', (ev, state) => {
|
streamwall.onState(setState)
|
||||||
setState(state)
|
|
||||||
})
|
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
useHotkeys('ctrl+shift+i', () => {
|
useHotkeys('ctrl+shift+i', () => {
|
||||||
ipcRenderer.send('devtools-overlay')
|
streamwall.openDevTools()
|
||||||
})
|
})
|
||||||
|
|
||||||
const { config, views, streams, customStreams } = state
|
const { config, views, streams, customStreams } = state
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
|
import path from 'path'
|
||||||
import isEqual from 'lodash/isEqual'
|
import isEqual from 'lodash/isEqual'
|
||||||
import intersection from 'lodash/intersection'
|
import intersection from 'lodash/intersection'
|
||||||
import EventEmitter from 'events'
|
import EventEmitter from 'events'
|
||||||
import { BrowserView, BrowserWindow, ipcMain } from 'electron'
|
import { app, BrowserView, BrowserWindow, ipcMain } from 'electron'
|
||||||
import { interpret } from 'xstate'
|
import { interpret } from 'xstate'
|
||||||
|
|
||||||
import viewStateMachine from './viewStateMachine'
|
import viewStateMachine from './viewStateMachine'
|
||||||
@@ -68,7 +69,8 @@ export default class StreamWindow extends EventEmitter {
|
|||||||
|
|
||||||
const backgroundView = new BrowserView({
|
const backgroundView = new BrowserView({
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
nodeIntegration: true,
|
contextIsolation: true,
|
||||||
|
preload: path.join(app.getAppPath(), 'layerPreload.js'),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
win.addBrowserView(backgroundView)
|
win.addBrowserView(backgroundView)
|
||||||
@@ -83,7 +85,8 @@ export default class StreamWindow extends EventEmitter {
|
|||||||
|
|
||||||
const overlayView = new BrowserView({
|
const overlayView = new BrowserView({
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
nodeIntegration: true,
|
contextIsolation: true,
|
||||||
|
preload: path.join(app.getAppPath(), 'layerPreload.js'),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
win.addBrowserView(overlayView)
|
win.addBrowserView(overlayView)
|
||||||
@@ -130,7 +133,6 @@ export default class StreamWindow extends EventEmitter {
|
|||||||
enableRemoteModule: false,
|
enableRemoteModule: false,
|
||||||
contextIsolation: true,
|
contextIsolation: true,
|
||||||
partition: 'persist:session',
|
partition: 'persist:session',
|
||||||
sandbox: true,
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
view.setBackgroundColor(backgroundColor)
|
view.setBackgroundColor(backgroundColor)
|
||||||
|
|||||||
@@ -403,7 +403,7 @@ async function main() {
|
|||||||
if (require.main === module) {
|
if (require.main === module) {
|
||||||
app.commandLine.appendSwitch('high-dpi-support', 1)
|
app.commandLine.appendSwitch('high-dpi-support', 1)
|
||||||
app.commandLine.appendSwitch('force-device-scale-factor', 1)
|
app.commandLine.appendSwitch('force-device-scale-factor', 1)
|
||||||
|
app.enableSandbox()
|
||||||
app
|
app
|
||||||
.whenReady()
|
.whenReady()
|
||||||
.then(main)
|
.then(main)
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ const browserConfig = {
|
|||||||
entry: {
|
entry: {
|
||||||
background: './src/browser/background.js',
|
background: './src/browser/background.js',
|
||||||
overlay: './src/browser/overlay.js',
|
overlay: './src/browser/overlay.js',
|
||||||
|
layerPreload: './src/browser/layerPreload.js',
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
new CopyPlugin({
|
new CopyPlugin({
|
||||||
|
|||||||
Reference in New Issue
Block a user