diff options
| author | Oskar Nyberg <oskar@mullvad.net> | 2021-11-03 00:19:05 +0100 |
|---|---|---|
| committer | Oskar Nyberg <oskar@mullvad.net> | 2022-03-14 13:58:44 +0100 |
| commit | b43833503ba221d775e2f6196ad6e0dec0929756 (patch) | |
| tree | de0c68c2b049a0ea3f659aa73f10869ebd7e8230 /gui/src/renderer | |
| parent | 6459ae7beefcc5f13eb54254dfe402dd807c62fe (diff) | |
| download | mullvadvpn-b43833503ba221d775e2f6196ad6e0dec0929756.tar.xz mullvadvpn-b43833503ba221d775e2f6196ad6e0dec0929756.zip | |
Remove everything related to WireGuard key handling
Diffstat (limited to 'gui/src/renderer')
| -rw-r--r-- | gui/src/renderer/app.tsx | 43 | ||||
| -rw-r--r-- | gui/src/renderer/components/AdvancedSettings.tsx | 67 | ||||
| -rw-r--r-- | gui/src/renderer/components/AdvancedSettingsStyles.tsx | 11 | ||||
| -rw-r--r-- | gui/src/renderer/components/AppRouter.tsx | 2 | ||||
| -rw-r--r-- | gui/src/renderer/components/NotificationArea.tsx | 8 | ||||
| -rw-r--r-- | gui/src/renderer/components/WireguardKeys.tsx | 345 | ||||
| -rw-r--r-- | gui/src/renderer/components/WireguardKeysStyles.tsx | 59 | ||||
| -rw-r--r-- | gui/src/renderer/components/WireguardSettings.tsx | 10 | ||||
| -rw-r--r-- | gui/src/renderer/containers/AdvancedSettingsPage.tsx | 1 | ||||
| -rw-r--r-- | gui/src/renderer/containers/WireguardKeysPage.tsx | 27 | ||||
| -rw-r--r-- | gui/src/renderer/containers/WireguardSettingsPage.tsx | 3 | ||||
| -rw-r--r-- | gui/src/renderer/lib/routes.ts | 1 | ||||
| -rw-r--r-- | gui/src/renderer/redux/settings/actions.ts | 99 | ||||
| -rw-r--r-- | gui/src/renderer/redux/settings/reducers.ts | 163 |
14 files changed, 24 insertions, 815 deletions
diff --git a/gui/src/renderer/app.tsx b/gui/src/renderer/app.tsx index 28f73ac9e0..8abb47af79 100644 --- a/gui/src/renderer/app.tsx +++ b/gui/src/renderer/app.tsx @@ -11,7 +11,6 @@ import { AppContext } from './context'; import accountActions from './redux/account/actions'; import connectionActions from './redux/connection/actions'; import settingsActions from './redux/settings/actions'; -import { IWgKey } from './redux/settings/reducers'; import configureStore from './redux/store'; import userInterfaceActions from './redux/userinterface/actions'; import versionActions from './redux/version/actions'; @@ -35,8 +34,6 @@ import { IDnsOptions, ILocation, ISettings, - IWireguardPublicKey, - KeygenEvent, liftConstraint, RelaySettings, RelaySettingsUpdate, @@ -160,14 +157,6 @@ export default class AppRenderer { this.storeAutoStart(autoStart); }); - IpcRendererEventChannel.wireguardKeys.listenPublicKey((publicKey?: IWireguardPublicKey) => { - this.setWireguardPublicKey(publicKey); - }); - - IpcRendererEventChannel.wireguardKeys.listenKeygenEvent((event: KeygenEvent) => { - this.reduxActions.settings.setWireguardKeygenEvent(event); - }); - IpcRendererEventChannel.windowsSplitTunneling.listen((applications: IApplication[]) => { this.reduxActions.settings.setSplitTunnelingApplications(applications); }); @@ -211,7 +200,6 @@ export default class AppRenderer { this.setUpgradeVersion(initialState.upgradeVersion); this.setGuiSettings(initialState.guiSettings); this.storeAutoStart(initialState.autoStart); - this.setWireguardPublicKey(initialState.wireguardPublicKey); this.setChangelog(initialState.changelog); if (initialState.macOsScrollbarVisibility !== undefined) { @@ -425,33 +413,6 @@ export default class AppRenderer { IpcRendererEventChannel.guiSettings.setUnpinnedWindow(unpinnedWindow); } - public async verifyWireguardKey(publicKey: IWgKey) { - const actions = this.reduxActions; - actions.settings.verifyWireguardKey(publicKey); - try { - const valid = await IpcRendererEventChannel.wireguardKeys.verifyKey(); - actions.settings.completeWireguardKeyVerification(valid); - } catch (e) { - const error = e as Error; - log.error(`Failed to verify WireGuard key - ${error.message}`); - actions.settings.completeWireguardKeyVerification(undefined); - } - } - - public async generateWireguardKey() { - const actions = this.reduxActions; - actions.settings.generateWireguardKey(); - const keygenEvent = await IpcRendererEventChannel.wireguardKeys.generateKey(); - actions.settings.setWireguardKeygenEvent(keygenEvent); - } - - public async replaceWireguardKey(oldKey: IWgKey) { - const actions = this.reduxActions; - actions.settings.replaceWireguardKey(oldKey); - const keygenEvent = await IpcRendererEventChannel.wireguardKeys.generateKey(); - actions.settings.setWireguardKeygenEvent(keygenEvent); - } - public getLinuxSplitTunnelingApplications() { return IpcRendererEventChannel.linuxSplitTunneling.getApplications(); } @@ -839,10 +800,6 @@ export default class AppRenderer { this.reduxActions.settings.updateAutoStart(autoStart); } - private setWireguardPublicKey(publicKey?: IWireguardPublicKey) { - this.reduxActions.settings.setWireguardKey(publicKey); - } - private setChangelog(changelog: IChangelog) { this.reduxActions.userInterface.setChangelog(changelog); } diff --git a/gui/src/renderer/components/AdvancedSettings.tsx b/gui/src/renderer/components/AdvancedSettings.tsx index 8ecf6c0052..596a638f51 100644 --- a/gui/src/renderer/components/AdvancedSettings.tsx +++ b/gui/src/renderer/components/AdvancedSettings.tsx @@ -1,12 +1,8 @@ import * as React from 'react'; -import { sprintf } from 'sprintf-js'; import { TunnelProtocol } from '../../shared/daemon-rpc-types'; import { messages } from '../../shared/gettext'; -import { WgKeyState } from '../redux/settings/reducers'; import { StyledNavigationScrollbars, - StyledNoWireguardKeyError, - StyledNoWireguardKeyErrorContainer, StyledSelectorForFooter, StyledTunnelProtocolContainer, } from './AdvancedSettingsStyles'; @@ -28,7 +24,6 @@ interface IProps { enableIpv6: boolean; blockWhenDisconnected: boolean; tunnelProtocol?: TunnelProtocol; - wireguardKeyState: WgKeyState; setEnableIpv6: (value: boolean) => void; setBlockWhenDisconnected: (value: boolean) => void; setTunnelProtocol: (value: OptionalTunnelProtocol) => void; @@ -49,9 +44,28 @@ export default class AdvancedSettings extends React.Component<IProps, IState> { private blockWhenDisconnectedRef = React.createRef<Switch>(); - public render() { - const hasWireguardKey = this.props.wireguardKeyState.type === 'key-set'; + private tunnelProtocolItems: Array<ISelectorItem<OptionalTunnelProtocol>>; + + public constructor(props: IProps) { + super(props); + + this.tunnelProtocolItems = [ + { + label: messages.gettext('Automatic'), + value: undefined, + }, + { + label: messages.pgettext('advanced-settings-view', 'WireGuard'), + value: 'wireguard', + }, + { + label: messages.pgettext('advanced-settings-view', 'OpenVPN'), + value: 'openvpn', + }, + ]; + } + public render() { return ( <BackAction action={this.props.onClose}> <Layout> @@ -141,22 +155,10 @@ export default class AdvancedSettings extends React.Component<IProps, IState> { <StyledTunnelProtocolContainer> <StyledSelectorForFooter title={messages.pgettext('advanced-settings-view', 'Tunnel protocol')} - values={this.tunnelProtocolItems(hasWireguardKey)} + values={this.tunnelProtocolItems} value={this.props.tunnelProtocol} onSelect={this.onSelectTunnelProtocol} /> - {!hasWireguardKey && ( - <StyledNoWireguardKeyErrorContainer> - <AriaDescription> - <StyledNoWireguardKeyError> - {messages.pgettext( - 'advanced-settings-view', - 'To enable WireGuard, generate a key under the "WireGuard key" setting below.', - )} - </StyledNoWireguardKeyError> - </AriaDescription> - </StyledNoWireguardKeyErrorContainer> - )} </StyledTunnelProtocolContainer> </AriaInputGroup> @@ -191,31 +193,6 @@ export default class AdvancedSettings extends React.Component<IProps, IState> { ); } - private tunnelProtocolItems = ( - hasWireguardKey: boolean, - ): Array<ISelectorItem<OptionalTunnelProtocol>> => { - return [ - { - label: messages.gettext('Automatic'), - value: undefined, - }, - { - label: hasWireguardKey - ? messages.pgettext('advanced-settings-view', 'WireGuard') - : sprintf('%(label)s (%(error)s)', { - label: messages.pgettext('advanced-settings-view', 'WireGuard'), - error: messages.pgettext('advanced-settings-view', 'missing key'), - }), - value: 'wireguard', - disabled: !hasWireguardKey, - }, - { - label: messages.pgettext('advanced-settings-view', 'OpenVPN'), - value: 'openvpn', - }, - ]; - }; - private renderConfirmBlockWhenDisconnectedAlert = () => { return ( <ModalAlert diff --git a/gui/src/renderer/components/AdvancedSettingsStyles.tsx b/gui/src/renderer/components/AdvancedSettingsStyles.tsx index bdc84701c6..f7a87b5311 100644 --- a/gui/src/renderer/components/AdvancedSettingsStyles.tsx +++ b/gui/src/renderer/components/AdvancedSettingsStyles.tsx @@ -1,6 +1,4 @@ import styled from 'styled-components'; -import { colors } from '../../config.json'; -import * as Cell from './cell'; import { NavigationScrollbars } from './NavigationBar'; import Selector from './cell/Selector'; @@ -19,12 +17,3 @@ export const StyledTunnelProtocolContainer = styled(StyledSelectorContainer)({ export const StyledNavigationScrollbars = styled(NavigationScrollbars)({ flex: 1, }); - -export const StyledNoWireguardKeyErrorContainer = styled(Cell.Footer)({ - paddingBottom: 0, -}); - -export const StyledNoWireguardKeyError = styled(Cell.FooterText)({ - fontWeight: 700, - color: colors.red, -}); diff --git a/gui/src/renderer/components/AppRouter.tsx b/gui/src/renderer/components/AppRouter.tsx index f72de697e3..998877bf97 100644 --- a/gui/src/renderer/components/AppRouter.tsx +++ b/gui/src/renderer/components/AppRouter.tsx @@ -16,7 +16,6 @@ import SelectLanguagePage from '../containers/SelectLanguagePage'; import SelectLocationPage from '../containers/SelectLocationPage'; import SettingsPage from '../containers/SettingsPage'; import SupportPage from '../containers/SupportPage'; -import WireguardKeysPage from '../containers/WireguardKeysPage'; import WireguardSettingsPage from '../containers/WireguardSettingsPage'; import { IHistoryProps, ITransitionSpecification, transitions, withHistory } from '../lib/history'; import { @@ -92,7 +91,6 @@ class AppRouter extends React.Component<IHistoryProps, IAppRoutesState> { <Route exact path={RoutePath.preferences} component={PreferencesPage} /> <Route exact path={RoutePath.advancedSettings} component={AdvancedSettingsPage} /> <Route exact path={RoutePath.wireguardSettings} component={WireguardSettingsPage} /> - <Route exact path={RoutePath.wireguardKeys} component={WireguardKeysPage} /> <Route exact path={RoutePath.openVpnSettings} component={OpenVPNSettingsPage} /> <Route exact path={RoutePath.splitTunneling} component={SplitTunnelingSettings} /> <Route exact path={RoutePath.support} component={SupportPage} /> diff --git a/gui/src/renderer/components/NotificationArea.tsx b/gui/src/renderer/components/NotificationArea.tsx index 1f79d8b90d..de8b547087 100644 --- a/gui/src/renderer/components/NotificationArea.tsx +++ b/gui/src/renderer/components/NotificationArea.tsx @@ -9,7 +9,6 @@ import { InAppNotificationProvider, InconsistentVersionNotificationProvider, NotificationAction, - NoValidKeyNotificationProvider, ReconnectingNotificationProvider, UnsupportedVersionNotificationProvider, UpdateAvailableNotificationProvider, @@ -38,12 +37,6 @@ export default function NotificationArea(props: IProps) { const blockWhenDisconnected = useSelector( (state: IReduxState) => state.settings.blockWhenDisconnected, ); - const tunnelProtocol = useSelector((state: IReduxState) => - 'normal' in state.settings.relaySettings - ? state.settings.relaySettings.normal.tunnelProtocol - : undefined, - ); - const wireGuardKey = useSelector((state: IReduxState) => state.settings.wireguardKeyState); const hasExcludedApps = useSelector( (state: IReduxState) => state.settings.splitTunneling && state.settings.splitTunnelingApplications.length > 0, @@ -58,7 +51,6 @@ export default function NotificationArea(props: IProps) { hasExcludedApps, }), new ErrorNotificationProvider({ tunnelState, accountExpiry, hasExcludedApps }), - new NoValidKeyNotificationProvider({ tunnelProtocol, wireGuardKey }), new InconsistentVersionNotificationProvider({ consistent: version.consistent }), new UnsupportedVersionNotificationProvider(version), ]; diff --git a/gui/src/renderer/components/WireguardKeys.tsx b/gui/src/renderer/components/WireguardKeys.tsx deleted file mode 100644 index 1a4dab38a6..0000000000 --- a/gui/src/renderer/components/WireguardKeys.tsx +++ /dev/null @@ -1,345 +0,0 @@ -import * as React from 'react'; -import { sprintf } from 'sprintf-js'; -import { TunnelState } from '../../shared/daemon-rpc-types'; -import { formatRelativeDate } from '../../shared/date-helper'; -import { messages } from '../../shared/gettext'; -import log from '../../shared/logging'; -import { IWgKey, WgKeyState } from '../redux/settings/reducers'; -import * as AppButton from './AppButton'; -import { AriaDescribed, AriaDescription, AriaDescriptionGroup } from './AriaGroup'; -import ClipboardLabel from './ClipboardLabel'; -import ImageView from './ImageView'; -import { BackAction } from './KeyboardNavigation'; -import { Layout } from './Layout'; -import { NavigationBar, NavigationContainer, NavigationItems, TitleBarItem } from './NavigationBar'; -import SettingsHeader, { HeaderTitle } from './SettingsHeader'; -import { - StyledButtonRow, - StyledContainer, - StyledContent, - StyledLastButtonRow, - StyledMessage, - StyledMessages, - StyledNavigationScrollbars, - StyledRow, - StyledRowLabel, - StyledRowLabelSpacer, - StyledRowValue, -} from './WireguardKeysStyles'; - -export interface IProps { - keyState: WgKeyState; - isOffline: boolean; - tunnelState: TunnelState; - windowFocused: boolean; - - onClose: () => void; - onGenerateKey: () => void; - onReplaceKey: (old: IWgKey) => void; - onVerifyKey: (publicKey: IWgKey) => void; - onVisitWebsiteKey: () => Promise<void>; -} - -export interface IState { - recentlyGeneratedKey: boolean; - userHasInitiatedVerification: boolean; - ageOfKeyString: string; -} - -export default class WireguardKeys extends React.Component<IProps, IState> { - public state = { - recentlyGeneratedKey: false, - userHasInitiatedVerification: false, - ageOfKeyString: WireguardKeys.ageOfKeyString(this.props.keyState), - }; - - private keyAgeUpdateInterval?: number; - - public static getDerivedStateFromProps(props: IProps) { - return { - ageOfKeyString: WireguardKeys.ageOfKeyString(props.keyState), - }; - } - - public componentDidMount() { - this.verifyKey(); - this.keyAgeUpdateInterval = window.setInterval(this.setAgeOfKeyStringState, 60 * 1000); - } - - public componentWillUnmount() { - clearInterval(this.keyAgeUpdateInterval); - } - - public componentDidUpdate(prevProps: IProps) { - const prevKey = - prevProps.keyState.type === 'key-set' ? prevProps.keyState.key.publicKey : undefined; - const key = - this.props.keyState.type === 'key-set' ? this.props.keyState.key.publicKey : undefined; - if (this.props.tunnelState.state === 'connected' && key !== undefined && key != prevKey) { - this.setState({ recentlyGeneratedKey: true }); - } - - if ( - this.state.recentlyGeneratedKey && - prevProps.tunnelState.state !== 'connected' && - this.props.tunnelState.state === 'connected' - ) { - this.setState({ recentlyGeneratedKey: false }); - } - } - - public render() { - return ( - <BackAction action={this.props.onClose}> - <Layout> - <StyledContainer> - <NavigationContainer> - <NavigationBar> - <NavigationItems> - <TitleBarItem> - { - // TRANSLATORS: Title label in navigation bar - messages.pgettext('wireguard-keys-nav', 'WireGuard key') - } - </TitleBarItem> - </NavigationItems> - </NavigationBar> - - <StyledNavigationScrollbars fillContainer> - <StyledContent> - <SettingsHeader> - <HeaderTitle> - {messages.pgettext('wireguard-keys-nav', 'WireGuard key')} - </HeaderTitle> - </SettingsHeader> - - <StyledRow> - <StyledRowLabel> - <span>{messages.pgettext('wireguard-key-view', 'Public key')}</span> - <StyledRowLabelSpacer /> - <span>{this.keyValidityLabel()}</span> - </StyledRowLabel> - - <StyledRowValue>{this.getKeyText()}</StyledRowValue> - </StyledRow> - <StyledRow> - <StyledRowLabel> - {messages.pgettext('wireguard-key-view', 'Key generated')} - </StyledRowLabel> - <StyledRowValue>{this.state.ageOfKeyString}</StyledRowValue> - </StyledRow> - - <StyledMessages>{this.getStatusMessage()}</StyledMessages> - - <StyledButtonRow>{this.getGenerateButton()}</StyledButtonRow> - <StyledButtonRow> - <AppButton.BlueButton - disabled={this.isVerifyButtonDisabled()} - onClick={this.handleVerifyKeyPress}> - <AppButton.Label> - {messages.pgettext('wireguard-key-view', 'Verify key')} - </AppButton.Label> - </AppButton.BlueButton> - </StyledButtonRow> - <StyledLastButtonRow> - <AppButton.BlockingButton - disabled={this.props.isOffline} - onClick={this.props.onVisitWebsiteKey}> - <AriaDescriptionGroup> - <AriaDescribed> - <AppButton.BlueButton> - <AppButton.Label> - {messages.pgettext('wireguard-key-view', 'Manage keys')} - </AppButton.Label> - <AriaDescription> - <AppButton.Icon - source="icon-extLink" - height={16} - width={16} - aria-label={messages.pgettext('accessibility', 'Opens externally')} - /> - </AriaDescription> - </AppButton.BlueButton> - </AriaDescribed> - </AriaDescriptionGroup> - </AppButton.BlockingButton> - </StyledLastButtonRow> - </StyledContent> - </StyledNavigationScrollbars> - </NavigationContainer> - </StyledContainer> - </Layout> - </BackAction> - ); - } - - private isVerifyButtonDisabled(): boolean { - return this.props.keyState.type !== 'key-set'; - } - - private handleVerifyKeyPress = () => { - this.setState({ userHasInitiatedVerification: true }); - this.verifyKey(); - }; - - private verifyKey() { - switch (this.props.keyState.type) { - case 'key-set': { - const key = this.props.keyState.key; - this.props.onVerifyKey(key); - break; - } - default: - log.error(`onVerifyKey called from invalid state - ${this.props.keyState.type}`); - } - } - - /// Action button can either generate or verify a key - private getGenerateButton() { - let buttonText = messages.pgettext('wireguard-key-view', 'Generate key'); - const regenerateText = messages.pgettext('wireguard-key-view', 'Regenerate key'); - - let disabled = false; - let generateKey = this.props.onGenerateKey; - switch (this.props.keyState.type) { - case 'key-set': { - buttonText = regenerateText; - const key = this.props.keyState.key; - generateKey = () => this.props.onReplaceKey(key); - break; - } - case 'being-verified': - disabled = true; - buttonText = regenerateText; - break; - case 'being-replaced': - case 'being-generated': - disabled = true; - buttonText = messages.pgettext('wireguard-key-view', 'Generating key'); - } - - return ( - <AppButton.GreenButton disabled={disabled} onClick={generateKey}> - <AppButton.Label>{buttonText}</AppButton.Label> - </AppButton.GreenButton> - ); - } - - private getKeyText() { - switch (this.props.keyState.type) { - case 'being-verified': - case 'key-set': { - // mimicking the truncating of the key from website - const publicKey = this.props.keyState.key.publicKey; - return ( - <StyledRowValue title={this.props.keyState.key.publicKey}> - <ClipboardLabel - value={publicKey} - displayValue={publicKey.substring(0, 20) + '...'} - obscureValue={false} - /> - </StyledRowValue> - ); - } - case 'being-replaced': - case 'being-generated': - return <ImageView source="icon-spinner" height={19} width={19} />; - default: - return ( - <StyledRowValue>{messages.pgettext('wireguard-key-view', 'No key set')}</StyledRowValue> - ); - } - } - - private keyValidityLabel() { - const keyStateType = this.props.keyState.type; - if (keyStateType === 'being-verified' && this.state.userHasInitiatedVerification) { - return <ImageView source="icon-spinner" height={20} width={20} />; - } else if (this.props.keyState.type === 'key-set') { - const valid = this.props.keyState.key.valid; - const show = this.state.userHasInitiatedVerification || valid === false; - return show && valid !== undefined ? ( - <StyledMessage success={valid}> - {valid - ? messages.pgettext('wireguard-key-view', 'Key is valid') - : messages.pgettext('wireguard-key-view', 'Key is invalid')} - </StyledMessage> - ) : null; - } else { - return null; - } - } - - private static ageOfKeyString(keyState: WgKeyState): string { - switch (keyState.type) { - case 'key-set': - case 'being-verified': { - const createdDate = Math.min(Date.parse(keyState.key.created), Date.now()); - return formatRelativeDate(new Date(), createdDate, true); - } - default: - return '-'; - } - } - - private setAgeOfKeyStringState = () => { - this.setState({ - ageOfKeyString: WireguardKeys.ageOfKeyString(this.props.keyState), - }); - }; - - private getStatusMessage() { - if (this.props.isOffline && this.state.recentlyGeneratedKey) { - return ( - <StyledMessage success={this.state.recentlyGeneratedKey}> - {messages.pgettext('wireguard-key-view', 'Reconnecting with new WireGuard key...')} - </StyledMessage> - ); - } else { - let message = ''; - switch (this.props.keyState.type) { - case 'key-set': { - const key = this.props.keyState.key; - if (key.replacementFailure) { - switch (key.replacementFailure) { - case 'too_many_keys': - message = this.formatKeygenFailure('too-many-keys'); - break; - case 'generation_failure': - message = this.formatKeygenFailure('generation-failure'); - break; - } - } else if (key.verificationFailed) { - message = messages.pgettext('wireguard-key-view', 'Key verification failed'); - } - - break; - } - case 'too-many-keys': - case 'generation-failure': - message = this.formatKeygenFailure(this.props.keyState.type); - break; - } - - return <StyledMessage success={false}>{message}</StyledMessage>; - } - } - - private formatKeygenFailure(failure: 'too-many-keys' | 'generation-failure'): string { - switch (failure) { - case 'too-many-keys': - // TRANSLATORS: "%(manage)" is replaced with the text in the "Manage keys" button. - return sprintf( - messages.pgettext( - 'wireguard-key-view', - 'Unable to regenerate key: you already have the maximum number of keys. To generate a new key, you first need to revoke one under “Manage keys.”', - ), - { manage: messages.pgettext('wireguard-key-view', 'Manage keys') }, - ); - case 'generation-failure': - return messages.pgettext('wireguard-key-view', 'Failed to generate a key'); - default: - return failure; - } - } -} diff --git a/gui/src/renderer/components/WireguardKeysStyles.tsx b/gui/src/renderer/components/WireguardKeysStyles.tsx deleted file mode 100644 index cf443b2fa5..0000000000 --- a/gui/src/renderer/components/WireguardKeysStyles.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import styled from 'styled-components'; -import { colors } from '../../config.json'; -import { normalText, smallText, tinyText } from './common-styles'; -import { Container } from './Layout'; -import { NavigationScrollbars } from './NavigationBar'; - -export const StyledNavigationScrollbars = styled(NavigationScrollbars)({ - flex: 1, -}); - -export const StyledContainer = styled(Container)({ - backgroundColor: colors.darkBlue, -}); - -export const StyledContent = styled.div({ - display: 'flex', - flexDirection: 'column', - flex: 1, -}); - -export const StyledMessages = styled.div({ - padding: '0 22px 20px', - flex: 1, -}); - -export const StyledMessage = styled.span(smallText, (props: { success: boolean }) => ({ - fontWeight: props.success ? 600 : 700, - color: props.success ? colors.green : colors.red, -})); - -export const StyledRow = styled.div({ - display: 'flex', - flexDirection: 'column', - padding: '0 22px', - marginBottom: '20px', -}); - -export const StyledButtonRow = styled(StyledRow)({ - marginBottom: '18px', -}); - -export const StyledLastButtonRow = styled(StyledButtonRow)({ - marginBottom: '22px', -}); - -export const StyledRowLabel = styled.span(tinyText, { - color: colors.white60, - lineHeight: '20px', - marginBottom: '5px', -}); - -export const StyledRowLabelSpacer = styled.div({ - flex: 1, -}); - -export const StyledRowValue = styled.span(normalText, { - fontWeight: 600, - color: colors.white, -}); diff --git a/gui/src/renderer/components/WireguardSettings.tsx b/gui/src/renderer/components/WireguardSettings.tsx index f799cff335..8bec012986 100644 --- a/gui/src/renderer/components/WireguardSettings.tsx +++ b/gui/src/renderer/components/WireguardSettings.tsx @@ -51,7 +51,6 @@ interface IProps { setWireguardMultihop: (value: boolean) => void; setWireguardPort: (port?: number) => void; setWireguardIpVersion: (ipVersion?: IpVersion) => void; - onViewWireguardKeys: () => void; onClose: () => void; } @@ -202,15 +201,6 @@ export default class WireguardSettings extends React.Component<IProps, IState> { </Cell.Footer> </AriaInputGroup> - <Cell.CellButtonGroup> - <Cell.CellButton onClick={this.props.onViewWireguardKeys}> - <Cell.Label> - {messages.pgettext('wireguard-settings-view', 'WireGuard key')} - </Cell.Label> - <Cell.Icon height={12} width={7} source="icon-chevron" /> - </Cell.CellButton> - </Cell.CellButtonGroup> - <AriaInputGroup> <Cell.Container> <AriaLabel> diff --git a/gui/src/renderer/containers/AdvancedSettingsPage.tsx b/gui/src/renderer/containers/AdvancedSettingsPage.tsx index 51ba310aad..0bc00ee204 100644 --- a/gui/src/renderer/containers/AdvancedSettingsPage.tsx +++ b/gui/src/renderer/containers/AdvancedSettingsPage.tsx @@ -16,7 +16,6 @@ const mapStateToProps = (state: IReduxState) => { return { enableIpv6: state.settings.enableIpv6, blockWhenDisconnected: state.settings.blockWhenDisconnected, - wireguardKeyState: state.settings.wireguardKeyState, tunnelProtocol, }; }; diff --git a/gui/src/renderer/containers/WireguardKeysPage.tsx b/gui/src/renderer/containers/WireguardKeysPage.tsx deleted file mode 100644 index b0c25e06a9..0000000000 --- a/gui/src/renderer/containers/WireguardKeysPage.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { connect } from 'react-redux'; -import { links } from '../../config.json'; -import WireguardKeys from '../components/WireguardKeys'; -import withAppContext, { IAppContext } from '../context'; -import { IHistoryProps, withHistory } from '../lib/history'; -import { IWgKey } from '../redux/settings/reducers'; -import { IReduxState, ReduxDispatch } from '../redux/store'; - -const mapStateToProps = (state: IReduxState) => ({ - keyState: state.settings.wireguardKeyState, - isOffline: state.connection.isBlocked, - tunnelState: state.connection.status, - windowFocused: state.userInterface.windowFocused, -}); -const mapDispatchToProps = (_dispatch: ReduxDispatch, props: IHistoryProps & IAppContext) => { - return { - onClose: () => props.history.pop(), - onGenerateKey: () => props.app.generateWireguardKey(), - onReplaceKey: (oldKey: IWgKey) => props.app.replaceWireguardKey(oldKey), - onVerifyKey: (publicKey: IWgKey) => props.app.verifyWireguardKey(publicKey), - onVisitWebsiteKey: () => props.app.openLinkWithAuth(links.manageKeys), - }; -}; - -export default withAppContext( - withHistory(connect(mapStateToProps, mapDispatchToProps)(WireguardKeys)), -); diff --git a/gui/src/renderer/containers/WireguardSettingsPage.tsx b/gui/src/renderer/containers/WireguardSettingsPage.tsx index 4b0af37510..d9ac31756d 100644 --- a/gui/src/renderer/containers/WireguardSettingsPage.tsx +++ b/gui/src/renderer/containers/WireguardSettingsPage.tsx @@ -6,7 +6,6 @@ import WireguardSettings from '../components/WireguardSettings'; import withAppContext, { IAppContext } from '../context'; import { createWireguardRelayUpdater } from '../lib/constraint-updater'; import { IHistoryProps, withHistory } from '../lib/history'; -import { RoutePath } from '../lib/routes'; import { RelaySettingsRedux } from '../redux/settings/reducers'; import { IReduxState, ReduxDispatch } from '../redux/store'; @@ -108,8 +107,6 @@ const mapDispatchToProps = (_dispatch: ReduxDispatch, props: IHistoryProps & IAp log.error('Failed to update mtu value', error.message); } }, - - onViewWireguardKeys: () => props.history.push(RoutePath.wireguardKeys), }; }; diff --git a/gui/src/renderer/lib/routes.ts b/gui/src/renderer/lib/routes.ts index 8a63cd6de0..ef06e14023 100644 --- a/gui/src/renderer/lib/routes.ts +++ b/gui/src/renderer/lib/routes.ts @@ -16,7 +16,6 @@ export enum RoutePath { preferences = '/settings/preferences', advancedSettings = '/settings/advanced', wireguardSettings = '/settings/advanced/wireguard', - wireguardKeys = '/settings/advanced/wireguard/keys', openVpnSettings = '/settings/advanced/openvpn', splitTunneling = '/settings/advanced/split-tunneling', support = '/settings/support', diff --git a/gui/src/renderer/redux/settings/actions.ts b/gui/src/renderer/redux/settings/actions.ts index 1b1e48265c..32cd157157 100644 --- a/gui/src/renderer/redux/settings/actions.ts +++ b/gui/src/renderer/redux/settings/actions.ts @@ -1,12 +1,7 @@ -import { - BridgeState, - IDnsOptions, - IWireguardPublicKey, - KeygenEvent, -} from '../../../shared/daemon-rpc-types'; +import { BridgeState, IDnsOptions } from '../../../shared/daemon-rpc-types'; import { IGuiSettingsState } from '../../../shared/gui-settings-state'; import { IApplication } from '../../../shared/application-types'; -import { BridgeSettingsRedux, IRelayLocationRedux, IWgKey, RelaySettingsRedux } from './reducers'; +import { BridgeSettingsRedux, IRelayLocationRedux, RelaySettingsRedux } from './reducers'; export interface IUpdateGuiSettingsAction { type: 'UPDATE_GUI_SETTINGS'; @@ -73,36 +68,6 @@ export interface IUpdateAutoStartAction { autoStart: boolean; } -// Used to set wireguard key when accounts are changed. -export interface IWireguardSetKey { - type: 'SET_WIREGUARD_KEY'; - key?: IWgKey; -} - -export interface IWireguardGenerateKey { - type: 'GENERATE_WIREGUARD_KEY'; -} - -export interface IWireguardReplaceKey { - type: 'REPLACE_WIREGUARD_KEY'; - oldKey: IWgKey; -} - -export interface IWireguardVerifyKey { - type: 'VERIFY_WIREGUARD_KEY'; - key: IWgKey; -} - -export interface IWireguardKeygenEvent { - type: 'WIREGUARD_KEYGEN_EVENT'; - event: KeygenEvent; -} - -export interface IWireguardKeyVerifiedAction { - type: 'WIREGUARD_KEY_VERIFICATION_COMPLETE'; - verified?: boolean; -} - export interface IUpdateDnsOptionsAction { type: 'UPDATE_DNS_OPTIONS'; dns: IDnsOptions; @@ -132,12 +97,6 @@ export type SettingsAction = | IUpdateOpenVpnMssfixAction | IUpdateWireguardMtuAction | IUpdateAutoStartAction - | IWireguardSetKey - | IWireguardVerifyKey - | IWireguardGenerateKey - | IWireguardReplaceKey - | IWireguardKeygenEvent - | IWireguardKeyVerifiedAction | IUpdateDnsOptionsAction | IUpdateSplitTunnelingStateAction | ISetSplitTunnelingApplicationsAction; @@ -237,54 +196,6 @@ function updateAutoStart(autoStart: boolean): IUpdateAutoStartAction { }; } -function setWireguardKey(publicKey?: IWireguardPublicKey): IWireguardSetKey { - const key = publicKey - ? { - publicKey: publicKey.key, - created: publicKey.created, - valid: undefined, - } - : undefined; - return { - type: 'SET_WIREGUARD_KEY', - key, - }; -} - -function setWireguardKeygenEvent(event: KeygenEvent): IWireguardKeygenEvent { - return { - type: 'WIREGUARD_KEYGEN_EVENT', - event, - }; -} - -function generateWireguardKey(): IWireguardGenerateKey { - return { - type: 'GENERATE_WIREGUARD_KEY', - }; -} - -function replaceWireguardKey(oldKey: IWgKey): IWireguardReplaceKey { - return { - type: 'REPLACE_WIREGUARD_KEY', - oldKey, - }; -} - -function verifyWireguardKey(key: IWgKey): IWireguardVerifyKey { - return { - type: 'VERIFY_WIREGUARD_KEY', - key, - }; -} - -function completeWireguardKeyVerification(verified?: boolean): IWireguardKeyVerifiedAction { - return { - type: 'WIREGUARD_KEY_VERIFICATION_COMPLETE', - verified, - }; -} - function updateDnsOptions(dns: IDnsOptions): IUpdateDnsOptionsAction { return { type: 'UPDATE_DNS_OPTIONS', @@ -322,12 +233,6 @@ export default { updateOpenVpnMssfix, updateWireguardMtu, updateAutoStart, - setWireguardKey, - setWireguardKeygenEvent, - generateWireguardKey, - replaceWireguardKey, - verifyWireguardKey, - completeWireguardKeyVerification, updateDnsOptions, updateSplitTunnelingState, setSplitTunnelingApplications, diff --git a/gui/src/renderer/redux/settings/reducers.ts b/gui/src/renderer/redux/settings/reducers.ts index 449ff2b563..9b55160a5e 100644 --- a/gui/src/renderer/redux/settings/reducers.ts +++ b/gui/src/renderer/redux/settings/reducers.ts @@ -1,7 +1,6 @@ import { IApplication } from '../../../shared/application-types'; import { BridgeState, - KeygenEvent, LiftedConstraint, ProxySettings, RelayLocation, @@ -11,7 +10,6 @@ import { IpVersion, } from '../../../shared/daemon-rpc-types'; import { IGuiSettingsState } from '../../../shared/gui-settings-state'; -import log from '../../../shared/logging'; import { ReduxAction } from '../store'; export type RelaySettingsRedux = @@ -73,54 +71,6 @@ export interface IRelayLocationRedux { cities: IRelayLocationCityRedux[]; } -export interface IWgKey { - publicKey: string; - created: string; - valid?: boolean; - replacementFailure?: KeygenEvent; - verificationFailed?: boolean; -} - -interface IWgKeySet { - type: 'key-set'; - key: IWgKey; -} - -interface IWgKeyNotSet { - type: 'key-not-set'; -} - -interface IWgTooManyKeys { - type: 'too-many-keys'; -} - -interface IWgKeyGenerationFailure { - type: 'generation-failure'; -} - -interface IWgKeyBeingGenerated { - type: 'being-generated'; -} - -interface IWgKeyBeingReplaced { - type: 'being-replaced'; - oldKey: IWgKey; -} - -interface IWgKeyBeingVerified { - type: 'being-verified'; - key: IWgKey; -} - -export type WgKeyState = - | IWgKeySet - | IWgKeyNotSet - | IWgKeyGenerationFailure - | IWgTooManyKeys - | IWgKeyBeingVerified - | IWgKeyBeingReplaced - | IWgKeyBeingGenerated; - export interface ISettingsReduxState { autoStart: boolean; guiSettings: IGuiSettingsState; @@ -140,7 +90,6 @@ export interface ISettingsReduxState { mtu?: number; }; dns: IDnsOptions; - wireguardKeyState: WgKeyState; splitTunneling: boolean; splitTunnelingApplications: IApplication[]; } @@ -183,9 +132,6 @@ const initialState: ISettingsReduxState = { showBetaReleases: false, openVpn: {}, wireguard: {}, - wireguardKeyState: { - type: 'key-not-set', - }, dns: { state: 'default', defaultOptions: { @@ -290,42 +236,6 @@ export default function ( bridgeState: action.bridgeState, }; - case 'SET_WIREGUARD_KEY': - return { - ...state, - wireguardKeyState: setWireguardKey(action.key), - }; - case 'WIREGUARD_KEYGEN_EVENT': - return { - ...state, - wireguardKeyState: setWireguardKeygenEvent(state, action.event), - }; - case 'WIREGUARD_KEY_VERIFICATION_COMPLETE': - return { - ...state, - wireguardKeyState: applyKeyVerification(state.wireguardKeyState, action.verified), - }; - case 'VERIFY_WIREGUARD_KEY': - return { - ...state, - wireguardKeyState: { type: 'being-verified', key: resetWireguardKeyErrors(action.key) }, - }; - - case 'GENERATE_WIREGUARD_KEY': - return { - ...state, - wireguardKeyState: { type: 'being-generated' }, - }; - - case 'REPLACE_WIREGUARD_KEY': - return { - ...state, - wireguardKeyState: { - type: 'being-replaced', - oldKey: resetWireguardKeyErrors(action.oldKey), - }, - }; - case 'UPDATE_DNS_OPTIONS': return { ...state, @@ -348,76 +258,3 @@ export default function ( return state; } } - -function setWireguardKey(key?: IWgKey): WgKeyState { - if (key) { - return { - type: 'key-set', - key, - }; - } else { - return { - type: 'key-not-set', - }; - } -} - -function resetWireguardKeyErrors(key: IWgKey): IWgKey { - return { - publicKey: key.publicKey, - created: key.created, - }; -} - -function setWireguardKeygenEvent(state: ISettingsReduxState, keygenEvent: KeygenEvent): WgKeyState { - const oldKeyState = state.wireguardKeyState; - if (oldKeyState.type === 'being-replaced') { - switch (keygenEvent) { - case 'too_many_keys': - case 'generation_failure': - return { - type: 'key-set', - key: { - ...oldKeyState.oldKey, - replacementFailure: keygenEvent, - }, - }; - default: - break; - } - } - switch (keygenEvent) { - case 'too_many_keys': - return { type: 'too-many-keys' }; - case 'generation_failure': - return { type: 'generation-failure' }; - default: - return { - type: 'key-set', - key: { - publicKey: keygenEvent.newKey.key, - created: keygenEvent.newKey.created, - valid: undefined, - }, - }; - } -} - -function applyKeyVerification(state: WgKeyState, verified?: boolean): WgKeyState { - const verificationFailed = verified === undefined ? true : undefined; - switch (state.type) { - case 'being-verified': - return { - type: 'key-set', - key: { - ...state.key, - valid: verified, - verificationFailed, - }, - }; - // drop the verification event if the key wasn't being verified. - default: - log.error("Received key verification event when key wasn't being verified"); - return state; - } -} |
