Commit graph

2792 commits

Author SHA1 Message Date
Alexandr Stelnykovych
ee8b51d7fe feat: update ivpnclient dependency and add additional test directories to .gitignore 2026-03-10 15:06:38 +02:00
Alexandr Stelnykovych
d07da4e350 feat(resolver): persist stale cache notification suppression
Add "Don't show again" action to the stale cache notification.
Suppression state is stored in the database and checked on startup.
System notification is shown only on first occurrence.
Reset handler in broadcasts now also clears the suppression record.

https://github.com/safing/portmaster/issues/2061
2026-03-10 00:18:53 +02:00
Alexandr Stelnykovych
183ac069eb feat(interop/ivpn): simplify IVPN detection notification message and update action text 2026-03-10 00:14:08 +02:00
Alexandr Stelnykovych
1465fe49af feat(UI/notifications): add "in-app-only" action visibility
Actions with visibility "in-app-only" are shown in the UI but skipped
when displaying system-level notifications (Tauri/OS). Updates Go,
TypeScript/Angular and Rust projects accordingly.
2026-03-10 00:12:02 +02:00
Alexandr Stelnykovych
939010a6ef feat(interop/ivpn): show compatibility notification with persistent suppress option
When Portmaster connects to the IVPN Client, display an info notification
informing the user that IVPN connections are allowed and that DNS will be
handled by Portmaster's local resolver when configured.

The notification includes a "Do not notify me anymore" action that
permanently suppresses future notifications by writing a marker record to
the core database. The check runs before showing the notification on each
subsequent connection.

The "Reset Notification States" API endpoint (and matching UI menu item)
now also clears the IVPN suppression record alongside the broadcast states,
so all suppressed notifications can be restored at once.

- service/interop/ivpn: add notification.go with initAndShowNotification,
  isNotificationSuppressed, and suppressNotification
- service/interop/ivpn/ivpn.go: show notification on connect if not suppressed
- service/broadcasts/api.go: extend reset-state handler to also delete the
  IVPN suppression record; update endpoint name and description
- desktop: rename "Reset Broadcast State" menu item and toast messages to
  "Reset Notifications State"
2026-03-09 22:16:04 +02:00
Alexandr Stelnykovych
e395dafa14 feat(UI/notifications): add ActionVisibility for conditional action display
Add a `Visibility` field to the `Action` struct allowing actions to be
hidden in the compact notification view and only shown when the user
expands the full notification (value: "detailed").

- base/notifications: add `ActionVisibility` type and `ActionVisibilityDetailed`
  constant to `Action` struct
- notifications.types.ts: expose `Visibility` field on the frontend `BaseAction`
  interface
- notification-list.component.html: filter out `detailed` actions in the
  compact list view
- generic-setting.ts: set default `Visibility: ''` on the inline UI action
2026-03-09 18:12:42 +02:00
Alexandr Stelnykovych
73460f522d interop/ivpn: bugfixes and refactor connection state management
Bugs fixed:
- Inbound UDP from VPN server incorrectly blocked
- Firewall verdicts possible before client status initialized

Also: move interop before interception in startup order, simplify DNS state tracking.
2026-03-01 21:00:03 +02:00
Alexandr Stelnykovych
8396300b05 feat(interoperability/ivpn): disable custom DNS when Portmaster interception is paused
Add EventStartStopState event  manager and IsStarted() method
to the Interception module so other modules can react to start/stop state changes.

Update IVPN interop to subscribe to interception start/stop events
and skip applying custom DNS settings when interception is inactive,
ensuring correct behavior when Portmaster is in the Paused state.
2026-02-28 14:34:51 +02:00
Alexandr Stelnykovych
cb6c8b5a2f fix: correct path for ivpnclient replacement in go.mod and ensure debug configurations for portmaster-core 2026-02-28 11:38:05 +02:00
Alexandr Stelnykovych
d40d8adbff feat(ivpn): update ivpnclient dependency and enhance hello request with active remote endpoint 2026-02-27 20:43:45 +02:00
Alexandr Stelnykovych
48c44128b6 refactor(interop/ivpn): improve client status handling and avoid stale data in firewall verdicts 2026-02-27 17:47:24 +02:00
Alexandr Stelnykovych
185a71e64b interop/ivpn,firewall: lock-free hot path via atomic.Pointer
Every connection verdict previously acquired an RWMutex to read IVPN
state. Replace it with atomic.Pointer[clientStatus] using an immutable
snapshot (copy-on-write) so reads are a single pointer load with no
locking on the per-packet hot path.

Apply the same pattern to the external verdict handler: replace a
data-racy plain function variable and two auxiliary atomic.Bool flags
with a single atomic.Pointer[ExtVerdictHandlerFunc]. Use CompareAndSwap
for set-once semantics. Move the load into the default branch of
filterHandler so pre-authenticated and DNS-redirect connections pay zero
cost.
2026-02-27 13:20:19 +02:00
Alexandr Stelnykovych
168c6ac3b5 service/interop: IVPN client interoperability
Allow Portmaster to cooperate with the IVPN client:
- Accept IVPN VPN tunnel and service process connections
- Delegate DNS control to Portmaster when custom DNS is configured
- Auto-connect to IVPN daemon on startup and on ping
- Hook into firewall verdict pipeline via new ExtVerdictHandler
2026-02-27 00:32:33 +02:00
Alexandr Stelnykovych
2d7d0323b0 feat(VisualStudio Code): add launch configurations
Some checks failed
Angular / Lint (push) Has been cancelled
Angular / Build (push) Has been cancelled
Go / Linter (push) Has been cancelled
Go / Test & Build (push) Has been cancelled
Release v2.X / Prep (push) Has been cancelled
Tauri / Build (push) Has been cancelled
Tauri / Linter (push) Has been cancelled
Release v2.X / Installer linux (push) Has been cancelled
Release v2.X / Installer windows (push) Has been cancelled
2025-12-17 14:08:24 +02:00
Alexandr Stelnykovych
b5cb006937 Bump version 2.1.7 2025-12-09 23:35:06 +02:00
Alexandr Stelnykovych
3c8bd02808 Earthfile: exclude extra fields when creating assets.zip
Some checks failed
Release v2.X / Prep (push) Has been cancelled
Release v2.X / Installer linux (push) Has been cancelled
Release v2.X / Installer windows (push) Has been cancelled
2025-12-09 23:27:02 +02:00
Alexandr Stelnykovych
d5d47223b4 fix(spn): Ensure intel data is initialized
Some checks failed
Release v2.X / Prep (push) Waiting to run
Release v2.X / Installer linux (push) Blocked by required conditions
Release v2.X / Installer windows (push) Blocked by required conditions
Go / Linter (push) Has been cancelled
Go / Test & Build (push) Has been cancelled
Prevent intel remaining uninitialized, which caused SPN to fail to bootstrap on connect.
https://github.com/safing/portmaster/issues/2095
2025-12-09 14:28:48 +02:00
Alexandr Stelnykovych
e1475a1a3e feat(build): add script to build Tauri application for Portmaster on Linux
Some checks failed
Release v2.X / Prep (push) Waiting to run
Release v2.X / Installer linux (push) Blocked by required conditions
Release v2.X / Installer windows (push) Blocked by required conditions
Tauri / Build (push) Has been cancelled
Tauri / Linter (push) Has been cancelled
2025-12-08 18:19:56 +02:00
Alexandr Stelnykovych
8c19468e32 refactor(UI): remove unused structs and simplify GTK theme handling 2025-12-08 17:58:58 +02:00
Alexandr Stelnykovych
9a2b4f6256 fix(UI): ensure GTK calls are executed on the main thread to prevent segfaults 2025-12-08 17:31:26 +02:00
Alexandr Stelnykovych
9af071ef17 fix(control): ensure wall-clock comparison for resume worker deadline
Some checks failed
Go / Test & Build (push) Has been cancelled
Release v2.X / Prep (push) Has been cancelled
Go / Linter (push) Has been cancelled
Release v2.X / Installer linux (push) Has been cancelled
Release v2.X / Installer windows (push) Has been cancelled
2025-12-01 13:32:46 +02:00
Alexandr Stelnykovych
1a47196d84
Merge pull request #2086 from safing/fix/pause-fixes
Some checks failed
Go / Linter (push) Has been cancelled
Go / Test & Build (push) Has been cancelled
Release v2.X / Prep (push) Has been cancelled
Release v2.X / Installer linux (push) Has been cancelled
Release v2.X / Installer windows (push) Has been cancelled
fixes in Pause logic
2025-11-28 13:40:59 +02:00
Alexandr Stelnykovych
aa507572d0 fix(group): correct IsStopped logic to use local state variable 2025-11-28 13:34:07 +02:00
Alexandr Stelnykovych
569e0a70dd fix(control): wait for SPN to fully stop before completing pause operation 2025-11-28 13:26:14 +02:00
Alexandr Stelnykovych
b12729cb3a Permanent verdict for accepted API outbound packets 2025-11-27 16:36:49 +02:00
Alexandr Stelnykovych
b43905aac5 Refactor resume worker to handle unexpected wall-clock changes and improve SPN auto-resume logic 2025-11-27 16:27:59 +02:00
Alexandr Stelnykovych
1208783f34 Enhance fast-tracking for API connections to maintain seamless UI experience after pause
Some checks failed
Go / Linter (push) Has been cancelled
Go / Test & Build (push) Has been cancelled
Release v2.X / Prep (push) Has been cancelled
Release v2.X / Installer windows (push) Has been cancelled
Release v2.X / Installer linux (push) Has been cancelled
2025-11-26 17:39:42 +02:00
Alexandr Stelnykovych
d635db77c2 Improve pause info display and error handling
Some checks failed
Go / Linter (push) Waiting to run
Go / Test & Build (push) Waiting to run
Release v2.X / Prep (push) Waiting to run
Release v2.X / Installer linux (push) Blocked by required conditions
Release v2.X / Installer windows (push) Blocked by required conditions
Angular / Lint (push) Has been cancelled
Angular / Build (push) Has been cancelled
Tauri / Build (push) Has been cancelled
Tauri / Linter (push) Has been cancelled
2025-11-26 13:01:24 +02:00
Alexandr Stelnykovych
4913147dd5 (UI) minor update of update pause notification messages
Some checks failed
Angular / Lint (push) Has been cancelled
Angular / Build (push) Has been cancelled
Go / Linter (push) Has been cancelled
Go / Test & Build (push) Has been cancelled
Release v2.X / Prep (push) Has been cancelled
Tauri / Build (push) Has been cancelled
Tauri / Linter (push) Has been cancelled
Release v2.X / Installer linux (push) Has been cancelled
Release v2.X / Installer windows (push) Has been cancelled
2025-11-21 14:07:57 +02:00
Alexandr Stelnykovych
7341fb3068
Merge pull request #2078 from safing/fix/UI-websocket-shutdown-lifecycle
Fix/UI websocket shutdown lifecycle
2025-11-21 12:54:47 +02:00
Alexandr Stelnykovych
76214bd986 Add WebSocket ping/pong keep-alive mechanism
Implements RFC 6455 compliant ping/pong health checking to detect dead connections:
- Send ping frames every 10 seconds
- Monitor pong responses with 5-second timeout after each ping
2025-11-21 12:28:57 +02:00
Alexandr Stelnykovych
0b20a368f9 Fix WebSocket shutdown and prevent WSA errors
- Add graceful shutdown for WebSocket reconnection loop
- Implement shutdown signal to stop connection attempts on exit
- Track and cancel tray handler tasks to prevent duplicates
- Handle app exit event to trigger WebSocket cleanup

Fixes WSAStartup error 10093 and application hang on shutdown.
2025-11-21 02:08:06 +02:00
Alexandr Stelnykovych
f5533b447c fix(traymenu): update SPN button logic and pause menu items based on SPN status
Some checks are pending
Release v2.X / Prep (push) Waiting to run
Release v2.X / Installer linux (push) Blocked by required conditions
Release v2.X / Installer windows (push) Blocked by required conditions
Tauri / Build (push) Waiting to run
Tauri / Linter (push) Waiting to run
2025-11-20 14:13:51 +02:00
Alexandr Stelnykovych
d957e0142f
Merge pull request #2069 from safing/fix/2051-ui-crash-in-rust-dark-light
Some checks failed
Release v2.X / Prep (push) Has been cancelled
Tauri / Build (push) Has been cancelled
Tauri / Linter (push) Has been cancelled
Release v2.X / Installer linux (push) Has been cancelled
Release v2.X / Installer windows (push) Has been cancelled
Fix: UI crash in rust dark light module
2025-11-12 16:11:54 +02:00
Alexandr Stelnykovych
a14a55c950
Merge pull request #2067 from safing/feature/2050-pause
Some checks failed
Release v2.X / Prep (push) Waiting to run
Release v2.X / Installer linux (push) Blocked by required conditions
Release v2.X / Installer windows (push) Blocked by required conditions
Tauri / Build (push) Waiting to run
Tauri / Linter (push) Waiting to run
Angular / Lint (push) Has been cancelled
Angular / Build (push) Has been cancelled
Go / Linter (push) Has been cancelled
Go / Test & Build (push) Has been cancelled
Feature: pause PM/SPN
2025-11-12 14:26:40 +02:00
Alexandr Stelnykovych
063fa7f115 fix(interception): ensure metrics are stopped on failed module start 2025-11-12 14:24:24 +02:00
Alexandr Stelnykovych
2a551d5f10 fix(test): add missing faker dependency for generated code
Added github.com/jaswdr/faker/v2 v2.9.0 to resolve test compilation failures
in generated factory test files
2025-11-12 13:19:17 +02:00
Alexandr Stelnykovych
40cd0dbe2f
Merge pull request #2064 from D3SOX/patch-1
Update log file path in issue templates
2025-11-12 12:49:06 +02:00
Alexandr Stelnykovych
4a3a494ed2
Update report-compatibility.md
PMv2 logs path on Windows
2025-11-12 12:48:26 +02:00
Alexandr Stelnykovych
f1f18d4b64
Update report-bug.md
PMv2 logs path in Windows
2025-11-12 12:47:37 +02:00
Alexandr Stelnykovych
f9105fc738 (core) Update golang dependencies
``
go get -u ./...
go mod tidy
```
Fixed SQLite related code to fit latest changes in  SQLite driver
2025-11-12 12:37:33 +02:00
Alexandr Stelnykovych
ae72509293 UI(Tauri): Replace local rust-dark-light with published dark-light crate
https://github.com/safing/portmaster/issues/2051
2025-11-11 19:44:31 +02:00
Alexandr Stelnykovych
14be84d2d0 fix(instance): re-add dnsmonitor to serviceGroupInterception module 2025-11-11 18:20:10 +02:00
Alexandr Stelnykovych
83fb71b4bc Merge branch 'development' into feature/2050-pause 2025-11-11 17:33:28 +02:00
Alexandr Stelnykovych
2009dcf9c8 fix: DNSMonitor module crash on stop
Some checks are pending
Go / Linter (push) Waiting to run
Go / Test & Build (push) Waiting to run
Release v2.X / Prep (push) Waiting to run
Release v2.X / Installer linux (push) Blocked by required conditions
Release v2.X / Installer windows (push) Blocked by required conditions
Add traceEnded channel to ETWSession for better session management

https://github.com/safing/portmaster/issues/2065
2025-11-11 17:32:56 +02:00
Alexandr Stelnykovych
3abb2b3c69 feat(control): add notification for automatic resume from pause state 2025-11-11 17:18:58 +02:00
Alexandr Stelnykovych
3406017754 Refactor status module initialization: register runtime privider as soon as possible 2025-11-11 17:17:26 +02:00
Alexandr Stelnykovych
3aaa5ab161 fix(control): adjust pause logic to ensure correct state updates and notification behavior
fix(traymenu): update tray menu label from "Secured" to "unknown"
fix(notifications): log error when notification is clicked without an associated action
2025-11-10 18:20:34 +02:00
Alexandr Stelnykovych
139610b99d feat(UI): enhance pause info display in system tray menu and reorganize menu item positions
https://github.com/safing/portmaster/issues/2050
2025-11-10 15:14:20 +02:00
Nico
c2d8e5a880
Update Linux log file path in issue templates 2025-11-09 18:51:45 +01:00