From a54ae3dfddfb2b81b57b03e0481fafccf5693135 Mon Sep 17 00:00:00 2001 From: SnailDOS Date: Sat, 27 Aug 2022 22:26:24 +0800 Subject: [PATCH] :tada: Add support to ignore invalid HTTPs certificates --- src/constants/settings.ts | 3 ++- src/interfaces/settings.ts | 1 + src/main/view.ts | 7 +++++- .../settings/components/Privacy/index.tsx | 24 ++++++++++++++++++- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/constants/settings.ts b/src/constants/settings.ts index 7bb7ae3..29720b2 100644 --- a/src/constants/settings.ts +++ b/src/constants/settings.ts @@ -50,7 +50,7 @@ export const DEFAULT_SETTINGS: ISettings = { type: 'empty', }, warnOnQuit: false, - version: 4, + version: 5, downloadsDialog: false, downloadsPath: app ? app.getPath('downloads') @@ -64,6 +64,7 @@ export const DEFAULT_SETTINGS: ISettings = { weather: false, }, doNotTrack: true, + ignoreCertificate: false, globalPrivacyControl: true, topBarVariant: 'default', }; diff --git a/src/interfaces/settings.ts b/src/interfaces/settings.ts index 668c6e1..9efd424 100644 --- a/src/interfaces/settings.ts +++ b/src/interfaces/settings.ts @@ -43,6 +43,7 @@ export interface ISettings { darkContents: boolean; downloadsDialog: boolean; downloadsPath: string; + ignoreCertificate: boolean; doNotTrack: boolean; topBarVariant: TopBarVariant; token: string | null; diff --git a/src/main/view.ts b/src/main/view.ts index b4e141b..a82a7fe 100644 --- a/src/main/view.ts +++ b/src/main/view.ts @@ -1,3 +1,4 @@ +/* eslint-disable prettier/prettier */ /* Copyright (c) 2021-2022 SnailDOS */ import { BrowserView, app, ipcMain } from 'electron'; @@ -276,6 +277,9 @@ export class View { } }); + const { object: settings } = Application.instance.settings; + if (settings.ignoreCertificate == false) { + app.commandLine.appendSwitch('ignore-certificate-errors'); this.webContents.addListener( 'certificate-error', async ( @@ -287,12 +291,13 @@ export class View { ) => { event.preventDefault(); this.errorURL = url; - await this.webContents.loadURL( + await this.webContents.loadURL( `${ERROR_PROTOCOL}://${NETWORK_ERROR_HOST}/${error}`, ); callback(false); }, ); + }; this.webContents.addListener('media-started-playing', () => { this.emitEvent('media-playing', true); diff --git a/src/renderer/views/settings/components/Privacy/index.tsx b/src/renderer/views/settings/components/Privacy/index.tsx index 164bea2..791b153 100644 --- a/src/renderer/views/settings/components/Privacy/index.tsx +++ b/src/renderer/views/settings/components/Privacy/index.tsx @@ -7,7 +7,7 @@ import { Button } from '~/renderer/components/Button'; import store from '../../store'; import { BLUE_500, RED_500 } from '~/renderer/constants'; import { observer } from 'mobx-react-lite'; -import { onSwitchChange } from '../../utils'; +import { onSwitchChange, alertSwitchChange } from '../../utils'; import { Switch } from '~/renderer/components/Switch'; import { ipcRenderer } from 'electron'; @@ -71,6 +71,27 @@ const GlobalPrivacyControlToggle = observer(() => { ); }); +const CertificateToggle = observer(() => { + const { ignoreCertificate } = store.settings; + + return ( + + + Ignore "HTTPS Certificates" and if they are expired. + <br></br> + <b> + WARNING. If you do toggle this on, please toggle it back on. This + protects you against phising, hijacked websites and network + interceptions. Turning this on should only be LAST RESORT. + </b> + + + + + + ); +}); + export const Privacy = () => { return ( <> @@ -102,6 +123,7 @@ export const Privacy = () => { + ); };