Commit Graph

3147 Commits

Author SHA1 Message Date
Davide
eb7d6a74e1
tvOS: Override focus behavior to enforce button colors (#1123)
The default gray color on focus defeats the purpose of having green/red
for Connect/Disconnect.
2025-01-29 15:51:00 +01:00
Davide
6f516d030e
Hijack environment to run tests in PRs (#1124)
Avoid the complications of accessing the PassepartoutKit private
repository by running tests against the public binary distribution.

Also a way to make sure that the framework is up to date.
2025-01-29 15:45:19 +01:00
Davide
04b574c3f1
Do not wait products until timeout
Fixes #1121
2025-01-29 12:56:03 +01:00
Davide
51f5c5824c
Move favorite column to the left 2025-01-29 12:54:15 +01:00
Davide
8d269e7113
Reuse provider entities for more than VPN (#1107)
Rename entities/views, and decouple provider templates from built
configurations. Reuse ProviderServerCoordinator.

This is in preparation for #507
2025-01-29 12:53:23 +01:00
Davide
cb93ee83ea
Publish CI release without draft flag 2025-01-29 12:12:54 +01:00
Davide
fcd91ce515
Fix indefinite spinner when listing products (#1121)
Reported by App Review on tvOS but applies in general.
2025-01-29 12:11:44 +01:00
Davide
7ff8dd4fc9
Decrease max log age to 1 day
Reuse log filenames in report issue.
2025-01-29 11:48:30 +01:00
Davide
d0077e03f1
Clarify the extent of the Ethernet rule 2025-01-29 10:00:04 +01:00
Davide
8513c2a22f
Only apply cellular/Ethernet on-demand rules on devices that support the interface (#1120)
Fixes #1096
Fixes #1060 

Revives #1119, but #1096 is more important.
2025-01-29 09:51:23 +01:00
Davide
b6cc5650c6
macOS: Perform provider server action on click address
Tap address to connect/select provider server, rather than a
separate column.

In the future, make country tappable to mean "connect to random
server of this country".

Fixes #1117
2025-01-29 01:44:43 +01:00
Davide
5752b3a8d0
Fix misaligned reveal button in secure fields
Fixes #1116
2025-01-29 01:44:42 +01:00
Davide
66285a819f
Get rid of unused scroll proxy in profiles list 2025-01-29 01:44:42 +01:00
Davide
c310b15688
macOS: Fix unreadable character in provider server favorite column
Fixes #1115
2025-01-29 01:44:42 +01:00
Davide
a7e67be3fd
macOS: Prevent main window from being minimized indefinitely
Fixes #1114
2025-01-29 01:44:42 +01:00
Davide
ab261084cd
iOS: Hide layout toggle on iPhone
Hardcode .list layout.

Fixes #1108
2025-01-29 01:44:40 +01:00
Davide
ec2b213b7c
Bump version 2025-01-27 12:33:14 +01:00
Davide
c6b1c03fcb
Do not show "Activating" when the tunnel is actually idle (#1105)
E.g. in airplane mode, the status shows as "Activating", but the tunnel
is not actively establishing any connection. It's just idle.

Reported here:
https://www.reddit.com/r/passepartout/comments/1i957zj/when_phone_going_into_airplane_mode_passepartout/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button
2025-01-27 12:31:50 +01:00
Davide
9145e81092
Group empty packages by path 2025-01-27 00:09:16 +01:00
Davide
11fcc132fb
OpenVPN: Prompt for credentials when needed (#1104)
Assume OpenVPN to be interactive if credentials are empty but required
(--auth-user-pass).

For this change, change paywall restriction to OTP only. Allow
interactive login similar to OpenVPN Connect "Save username/password".
2025-01-25 14:49:11 +01:00
Davide
b2e9f9a584
Log filtered profile names 2025-01-25 09:53:22 +01:00
Davide
45e33ae314
Resolve logging issues (#1102)
- Purge tunnel logs properly
- Prepend sessions with system information (app/system version, device
type)
2025-01-24 23:21:53 +01:00
Davide
09e8055b7d
Expand on logs generated by ErrorHandler
An error alert is being presented to the user.

Fixes #1098
2025-01-23 11:04:37 +01:00
Davide
60e3460966
OpenVPN: Fix potential deadlock on disconnection (#1097)
NE link writes are blocking and don't support timeout. When shutting
down a UDP session, the OCCPacket may fail to send and lock the session
in a stale state ("Active" but dead), with an infinite loop of "Failed
TUN read" messages in the log.

- First, [add cancellation handlers to NE UDP/TCP
sockets](https://github.com/passepartoutvpn/passepartoutkit-source/pull/464)
- Then, rather than writing the exit packet in the foreground and
scheduling cancellation:
  - Write the packet in a background task
  - Wait until timeout in the actor
  - Cancel the pending write and go ahead

This may still leak if NE socket cancellation doesn't work, but will
prevent deadlock.
2025-01-23 10:22:11 +01:00
Davide
f3d90a9a93
Present donations in reverse order
:-)
2025-01-22 23:11:28 +01:00
Davide
cd76c39102
Bump version 2025-01-22 22:35:37 +01:00
Davide
a13cc3474c
OpenVPN: Restore and improve negotiation speed (#1095)
The new OpenVPN parser was painfully slow due to allocating
NSRegularExpression zillion times, which resulted in poor performance
(4x time!) when processing long PUSH_REPLY messages. This is a hard
regression from v2 because [TunnelKit created the regexes
statically](339b509ddf/Sources/TunnelKitOpenVPNCore/ConfigurationParser.swift (L42)).

Solution: pre-allocate the regular expressions at parser creation time.

Optimize long fragmented replies further by catching PUSH_REPLY
continuations early, rather than parsing line by line.
2025-01-22 22:33:39 +01:00
Davide
8ab7b0d143
OpenVPN: Resolve issues with long negotiations (#1094)
Clean up the naive abuse of async/await in OpenVPNSession. Encapsulate
the instances of ControlChannel/DataChannel inside the Negotiator actor,
so that actor-isolation for them becomes automatically unnecessary.
Synchronous methods inside the actor are the way to go.

After that, handle control packets in orderly fashion, because this is
not being done and may spoil negotiation very easily. Probably also
happening in TunnelKit.

Ultimately, skip some unnecessary XOR processing in UDP when no XOR
method is actually set.
2025-01-22 22:33:29 +01:00
Davide
f76b1e26ba
Bump version/build 2025-01-22 18:18:42 +01:00
Davide
23dc416eb7
Bump version 2025-01-20 21:38:20 +01:00
Davide
a3281042f8
Fix iCloud/TV sync not working with Advanced Data Protection (#1090)
The ubiquity token does not seem to be a reliable source of truth for
the state of CloudKit. Faced with tvOS, now also with Advanced Data
Protection. It is nil, but CloudKit actually works.

Therefore, start a CloudKit container regardless of the ubiquity token.

The only downside is that the iCloud/TV icons of a profile will now only
appear crossed in case of in-app ineligibility, but this is in favor of
better functionality.
2025-01-20 21:37:26 +01:00
Davide
b2fde2327a
Skip CHANGELOG attachment in release 2025-01-20 16:23:58 +01:00
Davide
70c4b3ef7d
Bump version 2025-01-20 14:51:36 +01:00
Davide
1414080ea9
Do not require purchase for empty on-demand rules (#1089)
Major issue with migrated profiles with the "Excluding" policy. Existing
users are being opted into an unnecessary purchase.
2025-01-20 14:49:47 +01:00
Davide
bb49ccaffb
Bump version 2025-01-20 11:33:30 +01:00
Davide
8514bf24f2
OpenVPN: Default gateway not set properly in some cases (#1087)
Regression from TunnelKit, the parser was not handling multiple
redirect-gateway directives correctly.
2025-01-20 11:32:26 +01:00
Davide
7ecd37e6ba
Fix purchased features on Apple TV (#1083)
Refactor #1074 to show the appropriate list of eligible features in the
"Purchased" screen. The "X" signs are highly misleading.
2025-01-19 23:09:55 +01:00
Davide
66da9d165d
Omit broken links from TV paywall
Fixes #1068
2025-01-19 22:48:38 +01:00
Davide
b5b471a995
Depend on online package in framework manifest 2025-01-19 22:14:37 +01:00
Davide
55156598ef
Update some TODOs 2025-01-19 22:05:22 +01:00
Davide
afd6263460
Bump version 2025-01-19 12:36:37 +01:00
Davide
37e15016e4
Drop erroneous imports from OpenVPN/OpenSSL 2025-01-19 12:10:49 +01:00
Davide
c73b84c1fa
Redact resolved endpoints from logs 2025-01-19 12:09:36 +01:00
Davide
524243ebaa
Fix error alert when importing files from external apps (#1078)
URL.startAccessingSecurityScopedResource() fails in that case, but
permission is not required at all.

Could reproduce by importing .ovpn file from a Telegram chat.
2025-01-19 11:59:20 +01:00
Davide
54c66f48b5
Fix unused SecureRandom() value 2025-01-19 09:47:21 +01:00
Davide
b4d77a6443
Update 2025-01-19 00:45:59 +01:00
Davide
bd9f8d63a5
Improve debug logs and move methods to library (#1076)
- Move availableLogs() / purgeLogs() to library
- Append and rotate logs by size (500k)
- Add marker between app/tunnel launches
- Purge logs on each save (3 days)
- Unify debug log content view across platforms
    - macOS: Table + inspect full line
    - iOS/tvOS: Use List
    - Scroll to bottom onLoad()
2025-01-19 00:42:58 +01:00
Davide
a6e44872e9
Select country by typing on macOS
Fixes #1062
2025-01-19 00:18:12 +01:00
Davide
0f7530645c
Bump version 2025-01-18 18:15:20 +01:00
Davide
8972d9773e
Resolve several issues in bump script/lane (#1075)
- Simplify build/version updates by moving MARKETING_VERSION and
CURRENT_PROJECT_VERSION to Config.xcconfig
- Provide Ruby (for fastlane) and Bash (for CI) versions of
xconfig-get/set
- Copy release notes atomically inside the lane to guarantee they are
included in the version commit
- Add -nt to skip the build tag
2025-01-18 18:13:54 +01:00