Commit Graph

504 Commits

Author SHA1 Message Date
Roopesh Chander 1caa186ebc Tunnel view model: VPN-on-demand stuff shouldn't be part of the tunnel model 2018-11-12 19:24:13 +05:30
Roopesh Chander c0eb34c755 Model, Tunnels manager: Rewrite the model for VPN-on-demand
The VPN-on-demand settings should not be part of the tunnel
configuration. Rather, the onDemandRules stored in the
tunnel provider configuration serve as the one place
where the VPN-on-demand settings are stored.
2018-11-12 19:24:13 +05:30
Roopesh Chander b09f3e3992 TunnelsManager: Support for on-demand rules 2018-11-11 01:31:38 +05:30
Roopesh Chander 151ad9de84 Tunnel edit, Tunnel view model: UI for providing On-Demand activation options 2018-11-11 01:18:36 +05:30
Roopesh Chander 049e9f0b05 Model: Add activationType to tunnel configuration
We make sure existing tunnel serializations can be deserialized correctly.

We also bump up the tunnelConfigurationVersion, because the tunnel
configuration contents have changed.
2018-11-11 01:17:36 +05:30
Roopesh Chander 75474acb59 Model: ActivityType enum to represent VPN-on-demand options 2018-11-10 19:17:24 +05:30
Roopesh Chander ae627c5e5d Model: TunnelConfiguration: Add explicit conformance to Decodable 2018-11-10 19:01:34 +05:30
Roopesh Chander 0db19f187b Model: Ensure that a TunnelConfiguration always has a valid array of peers 2018-11-10 17:02:30 +05:30
Roopesh Chander e974b7df23 VPN: When activating while another tunnel is active, deactivate the other tunnel 2018-11-10 16:44:28 +05:30
Roopesh Chander e6917a6075 TunnelsManager: startDeactivation() need not take a completion handler
Because the completion handler pattern doesn't fit in this case.
2018-11-10 16:44:28 +05:30
Roopesh Chander 97d8570d99 VPN: There are no DNS errors to handle in the app now 2018-11-10 16:44:28 +05:30
Roopesh Chander 6d28240531 NE: Minor refactoring to enable calling startTunnel() with a tunnelConfiguration 2018-11-09 22:29:52 +05:30
Roopesh Chander 9568c7f980 VPN: Refresh tunnel statuses when app gets to the foreground
Because the tunnel could've be activated from iOS Settings now
2018-11-09 19:29:34 +05:30
Roopesh Chander fc93ca65a5 Remove unused code 2018-11-09 19:20:33 +05:30
Roopesh Chander fefa39de46 TunnelsManager: Ability to refresh connection statuses 2018-11-09 19:19:32 +05:30
Roopesh Chander c9c58f3755 NE: When there's an error starting the tunnel, show it to the user using displayMessage() 2018-11-09 17:07:42 +05:30
Roopesh Chander fffaba451a Remove unused file PacketTunnelOptionKey.swift 2018-11-08 18:59:16 +05:30
Roopesh Chander c0f9c01fb9 Move logic to extension: Bring up the tunnel from the stored providerConfiguration 2018-11-08 18:59:16 +05:30
Roopesh Chander df7197473e DNSResolver: Simplify 2018-11-08 17:52:11 +05:30
Roopesh Chander 40ce2604ea DNSResolver: Let's not cache DNS resolution results anymore 2018-11-08 17:52:11 +05:30
Roopesh Chander 7bde4a6300 DNSResolver: DNS resolution can now happen synchronously 2018-11-08 17:52:11 +05:30
Roopesh Chander 8f35d70482 Model: Endpoint.hostname() 2018-11-08 17:52:11 +05:30
Roopesh Chander e83af4bce5 Move logic to extension: NETunnelProviderProtocol extension code should be shared 2018-11-08 17:52:01 +05:30
Roopesh Chander 80e563406b Move logic to extension: Refactor PacketTunnelOptionsGenerator into a PacketTunnelSettingsGenerator 2018-11-08 15:44:13 +05:30
Roopesh Chander 13eebb2e64 Move logic to extension: Move DNSResolver to extension 2018-11-08 15:09:45 +05:30
Roopesh Chander 3f3f22a048 Move logic to extension: .resolvingEndpointDomains is not longer a valid status 2018-11-08 15:08:57 +05:30
Roopesh Chander 7c9d45ac97 Move logic to extension: DNS resolution no longer happens in the app 2018-11-08 15:04:12 +05:30
Roopesh Chander 6e5b691a83 Move logic to extension: Include shared model code when building the extension 2018-11-08 14:50:05 +05:30
Roopesh Chander 2afb2244ff Model: Move InterfaceConfiguration.publicKey to Curve25519.swift
The code for public key calculation need not be shared with the extension
2018-11-08 14:48:25 +05:30
Roopesh Chander de92f2dcd8 Move logic to extension: Move PacketTunnelOptionsGenerator to the extension 2018-11-08 14:16:30 +05:30
Roopesh Chander c7cad030aa Move logic to extension: Invoke startTunnel() without any options 2018-11-08 14:15:01 +05:30
Roopesh Chander f438f3ef6b Move logic to extension: Move model files to Shared 2018-11-08 13:56:50 +05:30
Roopesh Chander d15473a2f5 Tunnel edit: While preparing for reuse, should make onValueBeingEdited nil as well 2018-11-08 12:25:36 +05:30
Jason A. Donenfeld 8cb1850e44 Version bump 2018-11-07 17:43:50 +01:00
Roopesh Chander cc52c88321 iPad: Ensure we set sourceRect for all cases where we use sourceView 2018-11-07 17:43:30 +01:00
Roopesh Chander 2fd8792fa5 Info.plist: Register for handling public.text files for Open-in 2018-11-07 17:43:30 +01:00
Roopesh Chander 8ad6ba6adc Importing: Also support importing public.text files in the file picker 2018-11-07 17:43:30 +01:00
Roopesh Chander 6e142cd924 iPad: Set correct sourceRect for the popover anchored on the central 'Add' button 2018-11-07 18:23:12 +05:30
Roopesh Chander d477b132e4 TunnelsManager: Return a manager with no tunnels in the simulator
To be able to run at least parts of the app in the simulator.
2018-11-07 18:15:20 +05:30
Roopesh Chander 1bba1ffe16 iPad: Configuring the split-view controller should happen in init(), not loadView() 2018-11-07 15:54:30 +05:30
Jason A. Donenfeld f8f19ef3d7 Settings: show build id 2018-11-07 05:45:39 +01:00
Jason A. Donenfeld b927c961ae Version bump 2018-11-06 20:18:11 +01:00
Jason A. Donenfeld 414835e60e Importing: simplify 2018-11-06 20:16:40 +01:00
Roopesh Chander b9b8ae8908 Importing: Assume imported files without .conf or .zip extensions to be a config file 2018-11-07 00:35:37 +05:30
Roopesh Chander c9b27d1617 DNSResolver: No need to resolve if the endpoint is already an IP address 2018-11-06 23:59:48 +05:30
Roopesh Chander 1410b89f23 Model: Endpoint.hasHostAsIPAddress() 2018-11-06 23:59:48 +05:30
Jason A. Donenfeld b57824cde1 PacketTunnelProvider: modernize header 2018-11-06 19:04:53 +01:00
Roopesh Chander cc57d8443e Global: swiftlint autocorrect --format 2018-11-06 22:42:53 +05:30
Roopesh Chander fe191b1eff Global: swiftlint autocorrect 2018-11-06 22:42:05 +05:30
Roopesh Chander 2b3347b294 Importing: Error out on file with unsupported file extension 2018-11-06 22:32:33 +05:30
Jason A. Donenfeld 040f0a25ea wireguard-go-bridge: take fd instead of fnptr 2018-11-06 16:27:25 +01:00
Jason A. Donenfeld 2a7aa578d2 Xcode: enable more warnings 2018-11-06 16:27:25 +01:00
Roopesh Chander 0f61703c34 Tunnel edit: TunnelEditTableViewKeyValueCell need not support a read-only mode now 2018-11-06 19:01:13 +05:30
Roopesh Chander 845305d8c8 Tunnel edit: A new cell class for the public key field, to make the value scrollable 2018-11-06 17:05:03 +05:30
Roopesh Chander 5ea1c5aea8 Tunnel detail: Refactor out the label scrolling into a separate UI class 2018-11-06 16:49:09 +05:30
Roopesh Chander e9044966bf Tunnel view model: Peers in a configuation may not share the same public key 2018-11-06 08:17:56 +05:30
Roopesh Chander e05a6c31b9 Parser: Peers in a configuation may not share the same public key 2018-11-06 08:17:56 +05:30
Jason A. Donenfeld e6a6decd79 Version bump
We update the build number, not the version number, so that test flight
doesn't need a new review.
2018-11-05 21:44:00 +01:00
Roopesh Chander 4c701a0e4f Parser: Address, DNS and AllowedIPs can have mutliple entries 2018-11-05 23:53:00 +05:30
Roopesh Chander c1286c95c3 QR Code: Dismiss the QR code screen when the name prompt is cancelled 2018-11-05 23:38:41 +05:30
Roopesh Chander 3e8af3fd19 Tunnel view model: No need to save if we already have a validated configuration object 2018-11-05 22:55:09 +05:30
Jason A. Donenfeld 12a4acef61 global: convert to Swift 4.2 2018-11-05 06:31:25 +01:00
Jason A. Donenfeld 145b524954 TunnelsManager: account for no or many endpoints 2018-11-05 06:23:26 +01:00
Jason A. Donenfeld 8958a04ba4 PacketTunnelProvider: clamp v6 addresses to /120 2018-11-05 03:11:11 +01:00
Jason A. Donenfeld 395ccf0e87 Settings: account for bottom padding on iPhone X
Reported-by: Jeffrey A. Donenfeld <jad@runblue.com>
2018-11-05 02:09:40 +01:00
Jason A. Donenfeld 54cfa3dba3 XCode: use old network extension ID 2018-11-04 05:42:25 +01:00
Jason A. Donenfeld 1f7aaaa233 XCode: unify version strings 2018-11-04 03:51:50 +01:00
Jason A. Donenfeld 1ed21aa60c Settings: anchor logo to bottom 2018-11-04 03:37:18 +01:00
Roopesh Chander 8fb0baf5d2 Add a correct launch-screen storyboard 2018-11-04 02:31:04 +05:30
Jason A. Donenfeld 939f50be5f Revert "Settings: Swap table view sections"
This reverts commit 1108f82489.
2018-11-03 19:53:04 +01:00
Jason A. Donenfeld d91cac6327 Settings: simplify 2018-11-03 19:48:10 +01:00
Jason A. Donenfeld 355a555cc4 Global: run through swiftlint 2018-11-03 19:35:25 +01:00
Jason A. Donenfeld b3b63b5f5d Settings: limit size of logo 2018-11-03 19:20:21 +01:00
Jason A. Donenfeld 074e5e7063 Settings: use updated wireguard banner logo 2018-11-03 18:37:51 +01:00
Jason A. Donenfeld 4aba533630 TunnelsManager: restore sanity 2018-11-03 18:20:25 +01:00
Roopesh Chander c4d5f5975a Change version with 0.0.yyyymmdd versioning scheme 2018-11-03 19:28:29 +05:30
Roopesh Chander 215c56cec3 VPN: Make sure actions inside tunnelProvider completion handlers are done in the main queue
They should really already be in the main queue, but we do this just in case.
2018-11-03 19:26:28 +05:30
Roopesh Chander f4f1278a82 VPN: Start observing the status only if startTunnel() succeeds
This should fix the status change to .disconnected when we're resolving endpoints
2018-11-03 19:22:30 +05:30
Roopesh Chander 6fd9e7f53a VPN: We should never get a status change to .disconnected if we're resolving endpoints
But we do, which we'll fix subsequently
2018-11-03 18:58:27 +05:30
Roopesh Chander 395e6fcdda Revert "TunnelsManager: initialize observer on correct thread"
Rather, we'll make sure we always call startObservingTunnelStatus from
the main thread.

This reverts commit d16a6a167c.
2018-11-03 18:45:26 +05:30
Roopesh Chander c0c1fddb75 Settings: Show the captioned WireGuard logo at the end 2018-11-03 18:41:54 +05:30
Roopesh Chander 1108f82489 Settings: Swap table view sections 2018-11-03 17:53:50 +05:30
Roopesh Chander 4f287360a8 Remove empty image 2018-11-03 17:39:43 +05:30
Jeroen Leenarts f327edfc09 Add Wireguard logo with caption to project 2018-11-03 17:39:22 +05:30
Roopesh Chander bfdb3efa41 Tunnels list: Fix status switch look after flipping it off after an error 2018-11-03 17:28:16 +05:30
Roopesh Chander 0d4218f0c7 ErrorPresenter: showErrorAlert takes an onPresentated handler 2018-11-03 17:27:07 +05:30
Roopesh Chander 16c9f80ed8 Tunnels list: Should deselect the row when handling the selection 2018-11-03 16:05:02 +05:30
Roopesh Chander 49f055465b Tunnel list: Don't show the detail view after creating a config from scratch
So it's consistent with the other two "Add a configuration" menu items
2018-11-03 15:51:29 +05:30
Roopesh Chander 4ab4c79934 Ensure that all tunnel names are trimmed of whitespaces 2018-11-03 15:45:29 +05:30
Roopesh Chander eb122f87e2 Zip archive: Handle files within folders inside the zip 2018-11-03 15:37:31 +05:30
Jason A. Donenfeld d16a6a167c TunnelsManager: initialize observer on correct thread
Because of the callback recursion, this function needs to always be called from the right thread
2018-11-03 07:03:23 +01:00
Jason A. Donenfeld b81943aaac TunnelsManager: do not track currentTunnel
It's error prone and does not give us anything.
2018-11-03 06:22:57 +01:00
Jason A. Donenfeld 8bbc49015c TunnelsManager: do not change back to inactive if we are resolving the endpoint 2018-11-03 06:09:57 +01:00
Roopesh Chander 929470c693 Tunnels list: Remove separator lines in the table view 2018-11-03 10:26:15 +05:30
Roopesh Chander 12900e6af3 Tunnels list: Show an 'Add' button when there are no tunnels 2018-11-03 10:26:09 +05:30
Roopesh Chander 4bb45397f1 Tunnels list: Show a busy indicator before the tunnels are loaded 2018-11-03 10:25:47 +05:30
Roopesh Chander c6df88c893 Tunnels list: The Add and Settings buttons should be no-ops until the tunnels are loaded 2018-11-03 10:25:47 +05:30
Roopesh Chander e332d6cf0e Tunnel edit: Use layoutMarginsGuide instead of constants 2018-11-03 10:25:47 +05:30
Jason A. Donenfeld c025ff8024 TunnelsManager: fix use of arrayslice in addMultiple 2018-11-03 04:37:56 +01:00
Jason A. Donenfeld aa5634ee27 TunnelsManager: get rid of name set
Instead, tunnels itself should be a sorted-set. For now it's a list,
which is probably fine though.
2018-11-03 03:53:08 +01:00
Jason A. Donenfeld 2fdbe1c492 TunnelsManager: get rid of index management
No need for premature optimization. There aren't that many tunnels most
of the time, and calling sort on a partially sorted array is fast.
2018-11-03 03:43:09 +01:00
Jason A. Donenfeld 6c737545aa Global: no periods at the end of error messages 2018-11-03 03:43:09 +01:00
Jason A. Donenfeld 83eeb289c2 Import: rework addMultiple logic 2018-11-03 03:43:09 +01:00
Roopesh Chander 7077dac4e9 Tunnel detail: In the key-value cell, make the value label scrollable horizontally 2018-11-02 23:48:27 +05:30
Roopesh Chander 36292d570a Tunnel edit: Ensure all key-value fields have a placeholder text 2018-11-02 18:20:32 +05:30
Roopesh Chander 8fee05969e DNSResolver: Bugfix: Always call completion handler 2018-11-02 18:10:51 +05:30
Roopesh Chander c04773276a Info.plist: Update document icons and description 2018-11-02 17:40:46 +05:30
Roopesh Chander dd04633b1d Info.plist: Document type UTI should be consistent with exported UTI 2018-11-02 17:40:46 +05:30
Roopesh Chander 0e61d55d3e Info.plist: Register zip file for open-in 2018-11-02 17:40:46 +05:30
Roopesh Chander 2c999c09de Info.plist: Add .conf extension to document type 2018-11-02 17:40:46 +05:30
Roopesh Chander 2abcba8031 Add document icon 2018-11-02 17:39:43 +05:30
Roopesh Chander 1a169d5cc6 Add app icons 2018-11-02 16:11:24 +05:30
Roopesh Chander db8c6cbc21 Handle cell reuse in showing delete buttons in red 2018-11-02 13:24:10 +05:30
Roopesh Chander c643cd1478 Table edit: Show/hide 'Exclude Private IPs' instead of enable/disable 2018-11-02 13:12:10 +05:30
Roopesh Chander 864394cf81 Tunnel view model: If there's just one peer, populate the scratchpad on init
So that exclude private IPs can be computed correctly.
2018-11-02 13:09:45 +05:30
Roopesh Chander c61491391e Tunnel view model: Initialize peerData.numberOfPeers 2018-11-02 12:05:58 +05:30
Jason A. Donenfeld 799c2d96cd DNSResolver: getaddrinfo returns a sockaddr and inet_ntop takes strlen
The way this was written before was totally wrong.
2018-11-02 05:34:17 +01:00
Jason A. Donenfeld 2267079367 NetworkExtension: check isTunnelClosed before packet existence 2018-11-01 22:01:52 +01:00
Jason A. Donenfeld 73f4a90dee Global: OK over Ok 2018-11-01 21:22:12 +01:00
Roopesh Chander 2bb42ac3ec Deletion buttons are shown in red 2018-11-01 23:53:09 +05:30
Roopesh Chander bf2031776b Tunnel edit: Highlight erroring field keys in red 2018-11-01 23:45:48 +05:30
Roopesh Chander 9f98e172b6 Tunnels list: Swipe left to delete 2018-11-01 23:45:48 +05:30
Jason A. Donenfeld 42948b2816 Global: fix up strings 2018-11-01 19:01:43 +01:00
Roopesh Chander a0b24f53b5 QR code: Fix what happens when an error is shown 2018-11-01 22:08:01 +05:30
Roopesh Chander 79672fa920 NE: Show an alert when someone tries to start the VPN from iOS Settings 2018-11-01 22:08:01 +05:30
Jason A. Donenfeld ae992c3deb Export: fix up export format 2018-11-01 17:31:50 +01:00
Roopesh Chander 479f04a579 Tunnel errors: Consolidate tunnel activation errors into ErrorPresenter 2018-11-01 16:58:33 +05:30
Roopesh Chander e222c8391e TunnelsManager: Better errors 2018-11-01 16:57:40 +05:30
Roopesh Chander c056000b55 ConfigFile: WgQuickConfigFileWriter: Fix '[Peer]' section header 2018-11-01 16:13:30 +05:30
Roopesh Chander 2d6426f798 Importing: Account for errors in showing the 'No configurations found' error 2018-11-01 15:59:17 +05:30
Roopesh Chander 1889614157 Tunnel detail: Fix deletion of tunnel 2018-11-01 15:54:37 +05:30
Roopesh Chander d62c1fd84a VPN: TunnelsManager: Fix deletion code 2018-11-01 15:53:10 +05:30
Roopesh Chander c999c2a0ec VPN: Restart tunnel after modifying a currently active configuration 2018-11-01 15:36:59 +05:30
Roopesh Chander ecad18749a QR code: Degrade gracefully when running on the simulator or on a device without a camera 2018-11-01 11:45:44 +05:30
Roopesh Chander f7331997b2 Revert "QR code: QR code scanning is not available in the simulator"
This reverts commit 9729386406.
2018-11-01 11:45:44 +05:30
Roopesh Chander 771aab9f0f Importing: Show error when the zip file contains no .conf files 2018-11-01 11:45:44 +05:30
Roopesh Chander c681b02f7d VPN: We have to start observing the tunnelContainer before we attempt to activate it 2018-11-01 11:45:44 +05:30
Roopesh Chander fd30ce0e0d Importing: Error out on duplicate name 2018-11-01 11:45:44 +05:30
Roopesh Chander de7bf4cf16 QR Code: Error out on duplicate name 2018-11-01 11:45:44 +05:30
Roopesh Chander 247396ce48 Tunnel edit: Error out on duplicate name when creating / modifying a tunnel 2018-11-01 11:45:44 +05:30
Roopesh Chander 02ff2f783c VPN: An ErrorPresenter class to consolidate showing of error alerts 2018-11-01 11:45:44 +05:30
Roopesh Chander d20a1ce7a4 VPN: Introduce an error enum for adding/modifying/removing tunnels 2018-11-01 11:45:44 +05:30
Roopesh Chander 6a586b6f98 VPN: TunnelsManager: s/TunnelsManagerError/TunnelActivationError/g; 2018-11-01 01:47:53 +05:30
Roopesh Chander 699ace099c VPN: TunnelsManager should keep track of tunnel names to prevent duplicate names 2018-11-01 01:47:53 +05:30
Jason A. Donenfeld 56d827d04a UI: not all subclasses of CopyableLabelTableViewCell have a detailTextLabel, so generalize 2018-10-31 16:38:05 +01:00
Jason A. Donenfeld 04993104b1 TunnelManager: bound recursion in startActivation 2018-10-31 15:58:03 +01:00
Roopesh Chander 5528be92ff VPN: Retry startTunnel based on error conditions 2018-10-31 16:42:29 +05:30
Roopesh Chander dae0e10e20 Tunnel list: Fix importing zip with multiple configurations 2018-10-31 14:30:25 +05:30
Roopesh Chander efe019b643 VPN: Support adding multiple configurations in one shot 2018-10-31 14:29:54 +05:30
Jason A. Donenfeld d75a89c09a wireguard-go-bridge: extract version for consumption by network extension 2018-10-31 04:08:13 +01:00