me-web? 0.2: the test from outside, calls and games, mail, and what you can host
Phases two and three ship together, because their code grew in the same files. With consent the app asks the router to open 80, 443 and a high port for ten minutes (UPnP, NAT-PMP or PCP), and the server, holding a single-use ticket bound to the caller's own address, connects back and must get an HMAC only the app can give; the mappings are removed after the run and remembered until then, so a crash cannot leave one open. Hairpin is tried from inside. Two STUN servers, the outside one first, tell easy from hard NAT. Mail gets port 25 to Gmail and Outlook, the reverse name and five blocklists through the user's own resolver, network-wide UCEPROTECT listings counted as a caution. DNS, speed against the server (four at a time, twelve an hour per address) and the device follow, and six uses (website, home from outside, files, game server, fediverse, mail) close the run as possible, possible with a named workaround, or can't tell. Findings can be shared after reading the exact JSON: a file per submission under the unit's state directory, ten a day per address, deletable by the token the app keeps, swept after twelve months; /privacy says all of it in English and Italian. QR codes lead to the downloads. Every language carries every string. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
This commit is contained in:
1 parent
f79682eaef
commit
7cfc8b6de5
161 files changed
+23159
-305
No files matched your search
@@ -130,6 +130,56 @@
|
||||
</ItemsControl>
|
||||
</StackPanel>
|
||||
|
||||
|
||||
<Border Classes="consent" IsVisible="{Binding AskReach}" MaxWidth="760">
|
||||
<StackPanel Spacing="10">
|
||||
<TextBlock Classes="section" Margin="0" Text="{s:Tr ReachAskTitle}" />
|
||||
<TextBlock Classes="body" Text="{s:Tr ReachAskBody}" />
|
||||
<TextBlock Classes="small" Text="{s:Tr ReachAskPorts}" IsVisible="{Binding CanOpenPorts}" />
|
||||
<WrapPanel HorizontalAlignment="Right" ItemSpacing="10" LineSpacing="10">
|
||||
<Button Classes="quiet" Content="{s:Tr ReachSkip}"
|
||||
AutomationProperties.AutomationId="reach-skip"
|
||||
Command="{Binding ReachSkipCommand}" />
|
||||
<Button Classes="quiet" Content="{s:Tr ReachAsIs}"
|
||||
AutomationProperties.AutomationId="reach-as-is"
|
||||
Command="{Binding ReachAsIsCommand}" />
|
||||
<Button Classes="primary small" Content="{s:Tr ReachOpenPorts}" IsVisible="{Binding CanOpenPorts}"
|
||||
AutomationProperties.AutomationId="reach-open-ports"
|
||||
Command="{Binding ReachOpenPortsCommand}" />
|
||||
</WrapPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
|
||||
<StackPanel Spacing="8" IsVisible="{Binding HasResults}">
|
||||
<TextBlock Classes="section" Text="{s:Tr UsesTitle}" HorizontalAlignment="Center" />
|
||||
<ItemsControl ItemsSource="{Binding Uses}" HorizontalAlignment="Center">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<WrapPanel ItemWidth="{Binding CardWidth}" HorizontalAlignment="Center" />
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate x:DataType="vm:UseViewModel">
|
||||
<Border Classes="card use" AutomationProperties.AutomationId="{Binding AutomationId}"
|
||||
Classes.good="{Binding IsGood}" Classes.caution="{Binding IsCaution}"
|
||||
Classes.bad="{Binding IsBad}" Classes.unknown="{Binding IsUnknown}">
|
||||
<StackPanel Spacing="8">
|
||||
<Grid ColumnDefinitions="Auto,*,Auto">
|
||||
<Path Grid.Column="0" Classes="icon" Data="{Binding Icon}" VerticalAlignment="Center" />
|
||||
<TextBlock Grid.Column="1" Classes="cardTitle" Text="{Binding Title}" />
|
||||
<Border Grid.Column="2" Classes="chip">
|
||||
<TextBlock Text="{Binding VerdictFormatted}" />
|
||||
</Border>
|
||||
</Grid>
|
||||
<TextBlock Classes="summary" Text="{Binding Reason}" />
|
||||
<TextBlock Classes="body" FontSize="14" Foreground="{StaticResource TextSoftBrush}" Text="{Binding Advice}" IsVisible="{Binding ShowAdvice}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</StackPanel>
|
||||
<StackPanel Spacing="8" IsVisible="{Binding HasResults}">
|
||||
<TextBlock Classes="section" Text="{s:Tr ResultsTitle}" HorizontalAlignment="Center" />
|
||||
<ItemsControl ItemsSource="{Binding Cards}" HorizontalAlignment="Center">
|
||||
@@ -181,6 +231,46 @@
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</StackPanel>
|
||||
|
||||
<Border Classes="consent" IsVisible="{Binding OfferShare}" MaxWidth="760">
|
||||
<StackPanel Spacing="12">
|
||||
<TextBlock Classes="section" Margin="0" Text="{s:Tr ShareOfferTitle}" />
|
||||
<TextBlock Classes="body" Text="{s:Tr ShareOfferBody}" />
|
||||
<Grid HorizontalAlignment="Center">
|
||||
<Border Classes="halo" />
|
||||
<Button Classes="primary" Content="{s:Tr ShareOpen}"
|
||||
AutomationProperties.AutomationId="share-open"
|
||||
Command="{Binding OpenShareCommand}" />
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<TextBlock Classes="body" TextAlignment="Center" HorizontalAlignment="Center" MaxWidth="700"
|
||||
Text="{Binding ShareResult}" IsVisible="{Binding ShowShareResult}" />
|
||||
|
||||
<StackPanel Spacing="12" HorizontalAlignment="Center" Margin="8,10,8,0">
|
||||
<TextBlock Classes="section" Text="{s:Tr ElsewhereTitle}" HorizontalAlignment="Center" />
|
||||
<TextBlock Classes="small" Text="{s:Tr ElsewhereBody}" HorizontalAlignment="Center" TextAlignment="Center" MaxWidth="560" />
|
||||
<WrapPanel HorizontalAlignment="Center" ItemSpacing="28" LineSpacing="16">
|
||||
<StackPanel Spacing="8" Width="170">
|
||||
<Border Classes="code">
|
||||
<Path Data="{Binding AndroidCode}" Fill="{StaticResource GroundBrush}" Stretch="Uniform" />
|
||||
</Border>
|
||||
<TextBlock Classes="small" Text="{s:Tr ElsewhereAndroid}" TextAlignment="Center" />
|
||||
</StackPanel>
|
||||
<StackPanel Spacing="8" Width="170">
|
||||
<Border Classes="code">
|
||||
<Path Data="{Binding DownloadsCode}" Fill="{StaticResource GroundBrush}" Stretch="Uniform" />
|
||||
</Border>
|
||||
<TextBlock Classes="small" Text="{s:Tr ElsewhereAll}" TextAlignment="Center" />
|
||||
</StackPanel>
|
||||
</WrapPanel>
|
||||
<StackPanel Orientation="Horizontal" Spacing="12" HorizontalAlignment="Center">
|
||||
<Button Classes="quiet" Content="{s:Tr CopyLink}"
|
||||
AutomationProperties.AutomationId="elsewhere-copy-link"
|
||||
Command="{Binding CopyLinkCommand}" />
|
||||
<TextBlock Classes="small" Text="{s:Tr LinkCopied}" VerticalAlignment="Center" IsVisible="{Binding LinkCopied}" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</DockPanel>
|
||||
@@ -196,7 +286,7 @@
|
||||
Command="{Binding ToggleContactsCommand}" />
|
||||
</Grid>
|
||||
<TextBlock Classes="body" Text="{s:Tr ContactsIntro}" />
|
||||
<Grid ColumnDefinitions="Auto,*" RowDefinitions="Auto,Auto,Auto,Auto,Auto">
|
||||
<Grid ColumnDefinitions="Auto,*" RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto">
|
||||
<Path Grid.Row="0" Classes="icon" Data="{StaticResource IconServer}" VerticalAlignment="Top" Margin="0,0,12,12" />
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" Classes="body" Text="{s:Tr ContactServer}" Margin="0,0,0,12" />
|
||||
<Path Grid.Row="1" Classes="icon" Data="{StaticResource IconRouter}" VerticalAlignment="Top" Margin="0,0,12,12" />
|
||||
@@ -205,9 +295,33 @@
|
||||
<TextBlock Grid.Row="2" Grid.Column="1" Classes="body" Text="{s:Tr ContactRoute}" Margin="0,0,0,12" />
|
||||
<Path Grid.Row="3" Classes="icon" Data="{StaticResource IconGlobe}" VerticalAlignment="Top" Margin="0,0,12,12" />
|
||||
<TextBlock Grid.Row="3" Grid.Column="1" Classes="body" Text="{s:Tr ContactDns}" Margin="0,0,0,12" />
|
||||
<Path Grid.Row="4" Classes="icon" Data="{StaticResource IconArrowUpRight}" VerticalAlignment="Top" Margin="0,0,12,0" />
|
||||
<TextBlock Grid.Row="4" Grid.Column="1" Classes="body" Text="{s:Tr ContactLinks}" />
|
||||
<Path Grid.Row="4" Classes="icon" Data="{StaticResource IconRadioTower}" VerticalAlignment="Top" Margin="0,0,12,12" />
|
||||
<TextBlock Grid.Row="4" Grid.Column="1" Classes="body" Text="{s:Tr ContactStun}" Margin="0,0,0,12" />
|
||||
<Path Grid.Row="5" Classes="icon" Data="{StaticResource IconShare2}" VerticalAlignment="Top" Margin="0,0,12,12" />
|
||||
<TextBlock Grid.Row="5" Grid.Column="1" Classes="body" Text="{s:Tr ContactShare}" Margin="0,0,0,12" />
|
||||
<Path Grid.Row="6" Classes="icon" Data="{StaticResource IconMail}" VerticalAlignment="Top" Margin="0,0,12,12" />
|
||||
<TextBlock Grid.Row="6" Grid.Column="1" Classes="body" Text="{s:Tr ContactMail}" Margin="0,0,0,12" />
|
||||
<Path Grid.Row="7" Classes="icon" Data="{StaticResource IconGauge}" VerticalAlignment="Top" Margin="0,0,12,12" />
|
||||
<TextBlock Grid.Row="7" Grid.Column="1" Classes="body" Text="{s:Tr ContactSpeed}" Margin="0,0,0,12" />
|
||||
<Path Grid.Row="8" Classes="icon" Data="{StaticResource IconArrowUpRight}" VerticalAlignment="Top" Margin="0,0,12,0" />
|
||||
<TextBlock Grid.Row="8" Grid.Column="1" Classes="body" Text="{s:Tr ContactLinks}" />
|
||||
</Grid>
|
||||
<StackPanel Spacing="6" IsVisible="{Binding ShowShared}">
|
||||
<TextBlock Classes="body" FontWeight="SemiBold" Text="{s:Tr SharedTitle}" />
|
||||
<ItemsControl ItemsSource="{Binding Shared}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate x:DataType="vm:SubmissionViewModel">
|
||||
<StackPanel Orientation="Horizontal" Spacing="12" Margin="0,2">
|
||||
<TextBlock Classes="small" Text="{Binding Description}" VerticalAlignment="Center" />
|
||||
<Button Classes="link" Content="{s:Tr SubmissionDelete}"
|
||||
AutomationProperties.AutomationId="{Binding AutomationId}"
|
||||
Command="{Binding DeleteCommand}" />
|
||||
<TextBlock Classes="small" Text="{s:Tr SubmissionDeleteFailed}" IsVisible="{Binding Failed}" VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</StackPanel>
|
||||
<TextBlock Classes="body" Text="{s:Tr PrivacyLine}" />
|
||||
<StackPanel Orientation="Horizontal" Spacing="12">
|
||||
<Button Classes="quiet" Content="{s:Tr ClearHistory}"
|
||||
@@ -216,14 +330,43 @@
|
||||
<TextBlock Classes="small" Text="{s:Tr HistoryCleared}" VerticalAlignment="Center" IsVisible="{Binding HistoryCleared}" />
|
||||
</StackPanel>
|
||||
<TextBlock Classes="small" Text="{s:Tr AboutLine}" />
|
||||
<Button Classes="link" Content="{s:Tr SourceCode}"
|
||||
AutomationProperties.AutomationId="contacts-source"
|
||||
Command="{Binding OpenSourceCommand}" />
|
||||
<StackPanel Orientation="Horizontal" Spacing="16">
|
||||
<Button Classes="link" Content="{s:Tr SourceCode}"
|
||||
AutomationProperties.AutomationId="contacts-source"
|
||||
Command="{Binding OpenSourceCommand}" />
|
||||
<Button Classes="link" Content="{s:Tr PrivacyPage}"
|
||||
AutomationProperties.AutomationId="contacts-privacy"
|
||||
Command="{Binding OpenPrivacyCommand}" />
|
||||
</StackPanel>
|
||||
<TextBlock Classes="small" Text="{Binding MapFormatted}" />
|
||||
<TextBlock Classes="small" Text="{s:Tr IconsCredit}" />
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</Border>
|
||||
</Border>
|
||||
|
||||
<Border Classes="scrim" IsVisible="{Binding ShowShareSheet}">
|
||||
<Border Classes="sheet">
|
||||
<ScrollViewer HorizontalScrollBarVisibility="Disabled">
|
||||
<StackPanel Spacing="12">
|
||||
<TextBlock Classes="section" Margin="0" Text="{s:Tr ShareTitle}" />
|
||||
<TextBlock Classes="body" Text="{s:Tr ShareWho}" />
|
||||
<TextBlock Classes="body" Text="{s:Tr ShareWhy}" />
|
||||
<TextBlock Classes="body" Text="{s:Tr ShareKeep}" />
|
||||
<TextBlock Classes="small" Text="{s:Tr ShareExact}" />
|
||||
<TextBox Classes="payload" Text="{Binding SharePreview}" IsReadOnly="True" AcceptsReturn="True"
|
||||
AutomationProperties.AutomationId="share-preview" />
|
||||
<WrapPanel HorizontalAlignment="Right" ItemSpacing="10" LineSpacing="10">
|
||||
<Button Classes="quiet" Content="{s:Tr Cancel}"
|
||||
AutomationProperties.AutomationId="share-cancel"
|
||||
Command="{Binding CloseShareCommand}" />
|
||||
<Button Classes="primary small" Content="{s:Tr ShareSend}"
|
||||
AutomationProperties.AutomationId="share-send"
|
||||
Command="{Binding SendCommand}" />
|
||||
</WrapPanel>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</Border>
|
||||
</Border>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
Reference in new issue
Block a user