diff --git a/src/Titanium.Cli/Titanium.Cli.csproj b/src/Titanium.Cli/Titanium.Cli.csproj
index f84701d7d..ffe9499b7 100644
--- a/src/Titanium.Cli/Titanium.Cli.csproj
+++ b/src/Titanium.Cli/Titanium.Cli.csproj
@@ -7,7 +7,7 @@
latest
enable
false
- 7.0.7
+ 7.0.8
Jehonathan Thomas
Titanium Web Proxy CLI (titanium / twp).
MIT
diff --git a/src/Titanium.Inspector/Titanium.Inspector.csproj b/src/Titanium.Inspector/Titanium.Inspector.csproj
index 46684494e..86e0c1500 100644
--- a/src/Titanium.Inspector/Titanium.Inspector.csproj
+++ b/src/Titanium.Inspector/Titanium.Inspector.csproj
@@ -8,7 +8,7 @@
enable
true
false
- 7.0.7
+ 7.0.8
Jehonathan Thomas
Titanium Inspector desktop traffic debugger (PolyForm Noncommercial).
LICENSE
diff --git a/src/Titanium.Inspector/ViewModels/MainWindowViewModel.cs b/src/Titanium.Inspector/ViewModels/MainWindowViewModel.cs
index ce4d0bce7..0e250287f 100644
--- a/src/Titanium.Inspector/ViewModels/MainWindowViewModel.cs
+++ b/src/Titanium.Inspector/ViewModels/MainWindowViewModel.cs
@@ -977,7 +977,7 @@ private async Task ExcludeHostAsync()
return;
}
- var (saved, kind, _) = await AwaitCancellableAsync(ExcludeHostDialog.ShowAsync(owner, _settings, selected.Host));
+ var (saved, _) = await AwaitCancellableAsync(ExcludeHostDialog.ShowAsync(owner, _settings, selected.Host));
if (!saved)
{
StatusText = "Exclude host cancelled";
@@ -985,15 +985,8 @@ private async Task ExcludeHostAsync()
}
ApplyExclusionSettingsFromSettings();
- if (kind == ExcludeHostKind.BypassProxy && SystemProxy)
- {
- _interception.ReapplySystemProxyIfEnabled();
- }
-
UpdateExclusionSummary();
- StatusText = kind == ExcludeHostKind.BypassProxy
- ? $"Added {selected.Host} to OS bypass exclusions (new connections)"
- : $"Added {selected.Host} to tunnel-only exclusions (new connections)";
+ StatusText = $"Excluded {selected.Host} — still listed, HTTPS not read";
}
private async Task ResetSettingsAsync()
@@ -1461,13 +1454,13 @@ public bool ProxyLoopback
if (SystemProxy && !_interception.ReapplySystemProxyIfEnabled())
{
- StatusText = "Proxy localhost saved; re-toggle System proxy to apply";
+ StatusText = "Capture local traffic saved; re-toggle System proxy to apply";
return;
}
StatusText = value
- ? "Proxy localhost on — loopback uses the system proxy"
- : "Proxy localhost off — loopback skips the system proxy";
+ ? "Capture local traffic on — localhost uses the system proxy"
+ : "Capture local traffic off — localhost skips the system proxy";
}
}
diff --git a/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml b/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml
index e9b616786..96762c13d 100644
--- a/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml
+++ b/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml
@@ -3,26 +3,19 @@
x:Class="Titanium.Inspector.Views.ExcludeHostDialog"
AutomationProperties.AutomationId="ExcludeHostDialog"
Title="Exclude host"
- Width="440" Height="280"
+ Width="440" Height="220"
WindowStartupLocation="CenterOwner"
CanResize="False">
-
+
-
-
-
-
+
diff --git a/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml.cs b/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml.cs
index 3a0c74105..4afc81539 100644
--- a/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml.cs
+++ b/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml.cs
@@ -4,15 +4,10 @@
namespace Titanium.Inspector.Views;
-public enum ExcludeHostKind
-{
- TunnelOnly,
- BypassProxy,
-}
-
public partial class ExcludeHostDialog : Window
{
private readonly SettingsService _settings;
+ private readonly string _hostname;
private bool _saved;
public ExcludeHostDialog() : this(SettingsService.Load(), "")
@@ -22,44 +17,47 @@ public ExcludeHostDialog() : this(SettingsService.Load(), "")
public ExcludeHostDialog(SettingsService settings, string hostname)
{
_settings = settings;
+ _hostname = hostname.Trim();
InitializeComponent();
- HostLabel.Text = $"Exclude: {hostname}";
+ HostLabel.Text = _hostname;
+ var parent = ExtractParentDomain(_hostname);
+ if (string.IsNullOrEmpty(parent))
+ {
+ WildcardParentCheck.IsVisible = false;
+ }
+ else
+ {
+ WildcardParentCheck.Content = "Also exclude other hosts on " + parent;
+ }
+
SaveButton.Click += OnSave;
CancelButton.Click += (_, _) => Close();
- BypassProxyRadio.IsCheckedChanged += (_, _) => UpdateWarning();
- TunnelOnlyRadio.IsCheckedChanged += (_, _) => UpdateWarning();
}
public bool Saved => _saved;
- public ExcludeHostKind SelectedKind =>
- BypassProxyRadio.IsChecked == true ? ExcludeHostKind.BypassProxy : ExcludeHostKind.TunnelOnly;
- public static async Task<(bool Saved, ExcludeHostKind Kind, bool WildcardParent)> ShowAsync(
+ public static async Task<(bool Saved, bool WildcardParent)> ShowAsync(
Window owner,
SettingsService settings,
string hostname)
{
var w = new ExcludeHostDialog(settings, hostname);
await w.ShowDialog(owner);
- return (w.Saved, w.SelectedKind, w.WildcardParentCheck.IsChecked == true);
+ return (w.Saved, w.WildcardParentCheck.IsChecked == true);
}
- private void UpdateWarning() =>
- BypassWarning.IsVisible = BypassProxyRadio.IsChecked == true;
-
- private void OnSave(object? sender, RoutedEventArgs e) // NOSONAR S3776 -- Dialog save writes bypass and decrypt-skip lists together.
+ private void OnSave(object? sender, RoutedEventArgs e)
{
- var host = HostLabel.Text?["Exclude: ".Length..].Trim();
- if (string.IsNullOrWhiteSpace(host))
+ if (string.IsNullOrWhiteSpace(_hostname))
{
Close();
return;
}
- var patterns = new List { host };
- if (WildcardParentCheck.IsChecked == true)
+ var patterns = new List { _hostname };
+ if (WildcardParentCheck.IsVisible && WildcardParentCheck.IsChecked == true)
{
- var parent = ExtractParentDomain(host);
+ var parent = ExtractParentDomain(_hostname);
if (!string.IsNullOrEmpty(parent))
{
patterns.Add("*." + parent);
@@ -67,19 +65,9 @@ private void OnSave(object? sender, RoutedEventArgs e) // NOSONAR S3776 -- Dialo
}
var s = _settings.Current;
- if (SelectedKind == ExcludeHostKind.BypassProxy)
- {
- foreach (var p in patterns.Where(p => !s.SystemProxyBypassHosts.Contains(p, StringComparer.OrdinalIgnoreCase)))
- {
- s.SystemProxyBypassHosts.Add(p);
- }
- }
- else
+ foreach (var p in patterns.Where(p => !s.DecryptSkipHosts.Contains(p, StringComparer.OrdinalIgnoreCase)))
{
- foreach (var p in patterns.Where(p => !s.DecryptSkipHosts.Contains(p, StringComparer.OrdinalIgnoreCase)))
- {
- s.DecryptSkipHosts.Add(p);
- }
+ s.DecryptSkipHosts.Add(p);
}
_settings.Save();
diff --git a/src/Titanium.Inspector/Views/ExcludedHostsWindow.axaml b/src/Titanium.Inspector/Views/ExcludedHostsWindow.axaml
index 3715bf2c4..0e7f6e4b8 100644
--- a/src/Titanium.Inspector/Views/ExcludedHostsWindow.axaml
+++ b/src/Titanium.Inspector/Views/ExcludedHostsWindow.axaml
@@ -28,7 +28,7 @@
FontFamily="Consolas,Courier New,monospace"
AutomationProperties.AutomationId="ExcludedBypassHosts" />
-
+
-
-
+
+ Text="When origin TLS fails repeatedly under decrypt, or the origin server returns 403/429, Inspector stops decrypting that host for later connections in this session. List is capped and forgotten on restart unless you promote." />
-
diff --git a/src/Titanium.Inspector/Views/MainWindow.axaml b/src/Titanium.Inspector/Views/MainWindow.axaml
index 8f39e5873..5c801d603 100644
--- a/src/Titanium.Inspector/Views/MainWindow.axaml
+++ b/src/Titanium.Inspector/Views/MainWindow.axaml
@@ -47,7 +47,7 @@
IsChecked="{Binding SystemProxy, Mode=OneWay}"
Command="{Binding ToggleSystemProxyCommand}"
AutomationProperties.AutomationId="MenuToggleSystemProxy" />
-