Compare commits

..

No commits in common. "master" and "v1.0" have entirely different histories.
master ... v1.0

11 changed files with 38 additions and 165 deletions

View file

@ -42,20 +42,7 @@ jobs:
--self-contained true \ --self-contained true \
-p:PublishSingleFile=true \ -p:PublishSingleFile=true \
-p:PublishTrimmed=true \ -p:PublishTrimmed=true \
-o ./output_linux_x64 -o ./output_linux
- name: Build the project (Linux arm64)
run: |
dotnet publish ./Cryptura/Cryptura.csproj \
-c Release \
-r linux-arm64 \
--self-contained true \
-p:PublishSingleFile=true \
-p:PublishTrimmed=true \
-o ./output_linux_arm64
- name: Build the project (Windows x64) - name: Build the project (Windows x64)
run: | run: |
dotnet publish ./Cryptura/Cryptura.csproj \ dotnet publish ./Cryptura/Cryptura.csproj \
@ -64,49 +51,15 @@ jobs:
--self-contained true \ --self-contained true \
-p:PublishSingleFile=true \ -p:PublishSingleFile=true \
-p:PublishTrimmed=true \ -p:PublishTrimmed=true \
-o ./output_win_x64 -o ./output_win
- name: Build the project (Windows arm64)
run: |
dotnet publish ./Cryptura/Cryptura.csproj \
-c Release \
-r win-arm64 \
--self-contained true \
-p:PublishSingleFile=true \
-p:PublishTrimmed=true \
-o ./output_win_arm64
- name: Download appimagetool
run: |
curl -L -o appimagetool-x86_64.AppImage https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
chmod +x appimagetool-x86_64.AppImage
- name: Build AppImage
run: |
mkdir -p Cryptura.AppDir/usr/bin
cp -r ./output_linux_x64/* Cryptura.AppDir/usr/bin/
cp Cryptura/Assets/AppRun Cryptura.AppDir/
cp Cryptura/Assets/cryptura.desktop Cryptura.AppDir/
cp Cryptura/Assets/cryptura.png Cryptura.AppDir/
chmod +x Cryptura.AppDir/AppRun
./appimagetool-x86_64.AppImage Cryptura.AppDir
mkdir -p release
mv Cryptura-x86_64.AppImage release/Cryptura_Linux_x64.AppImage
- name: Pack Releases into Zips - name: Pack Releases into Zips
run: | run: |
mkdir -p ./release mkdir -p ./release
zip -r ./release/Cryptura_Linux_x64.zip ./output_linux_x64 zip -r ./release/Cryptura_Linux_x64.zip ./output_linux
zip -r ./release/Cryptura_Linux_arm64.zip ./output_linux_arm64 zip -r ./release/Cryptura_Windows_x64.zip ./output_win
zip -r ./release/Cryptura_Windows_x64.zip ./output_win_x64 rm -rf ./output_linux ./output_win
zip -r ./release/Cryptura_Windows_arm64.zip ./output_win_arm64
rm -rf ./output_linux_x64 ./output_linux_arm64 ./output_win_x64 ./output_win_arm64
- name: Create Git tag - name: Create Git tag

View file

@ -1,3 +0,0 @@
#!/bin/bash
HERE="$(dirname "$(readlink -f "$0")")"
exec "$HERE/usr/bin/Cryptura" "$@"

View file

@ -1,6 +0,0 @@
[Desktop Entry]
Type=Application
Name=Cryptura
Exec=Cryptura
Icon=cryptura
Categories=Utility;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 KiB

View file

@ -4,11 +4,10 @@
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport> <BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<ApplicationIcon>icon.ico</ApplicationIcon>
<ApplicationManifest>app.manifest</ApplicationManifest> <ApplicationManifest>app.manifest</ApplicationManifest>
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault> <AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
<AssemblyVersion>1.0</AssemblyVersion> <AssemblyVersion>1.0</AssemblyVersion>
<FileVersion>2.0</FileVersion> <FileVersion>1.0</FileVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -9,8 +9,6 @@
Background="Transparent" Background="Transparent"
Height="400" Height="400"
Width="520" Width="520"
MinHeight="340"
MinWidth="340"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
Title="Cryptura"> Title="Cryptura">
<!--ExtendClientAreaToDecorationsHint="True"--> <!--ExtendClientAreaToDecorationsHint="True"-->
@ -26,10 +24,8 @@
</ExperimentalAcrylicBorder> </ExperimentalAcrylicBorder>
<Grid> <Grid>
<Border Width="1" Background="#80000000" Margin="5,20" HorizontalAlignment="Center" ZIndex="1" Name="MiddleSeperator" IsVisible="False"/> <Border Grid.Row="0" Background="#80000000" CornerRadius="10" Margin="10" Name="ContentBorder">
<Border Background="#80000000" CornerRadius="10" Margin="10" Name="ContentBorder"> <ListBox Name="PasswordList" Background="Transparent" SelectionChanged="PasswordList_OnSelectionChanged">
<ListBox Name="PasswordList" Background="Transparent" SelectionChanged="PasswordList_OnSelectionChanged"
Margin="10">
<ListBox.ItemTemplate> <ListBox.ItemTemplate>
<DataTemplate x:DataType="local:Password"> <DataTemplate x:DataType="local:Password">
<Border Background="Transparent" Padding="10"> <Border Background="Transparent" Padding="10">
@ -37,26 +33,11 @@
<ContextMenu> <ContextMenu>
<MenuItem Header="Add New Password" Click="CreatePassword_OnClick"/> <MenuItem Header="Add New Password" Click="CreatePassword_OnClick"/>
<MenuItem Header="Remove Password" Click="DeletePassword_OnClick"/> <MenuItem Header="Remove Password" Click="DeletePassword_OnClick"/>
<MenuItem Header="Hide/Unhide Passwords" Click="ToggleHide_OnClick"/>
</ContextMenu> </ContextMenu>
</Border.ContextMenu> </Border.ContextMenu>
<Grid ColumnDefinitions="*, *"> <Grid ColumnDefinitions="*, *">
<TextBlock <TextBlock Grid.Column="0" Foreground="White" Text="{Binding Name}" VerticalAlignment="Center"/>
Grid.Column="0" <TextBlock Grid.Column="1" Foreground="White" Text="{Binding DisplayValue}" VerticalAlignment="Center"/>
Foreground="White"
Text="{Binding Name}"
VerticalAlignment="Center"
TextTrimming="CharacterEllipsis"
TextWrapping="NoWrap"
Margin="20,0"/>
<TextBlock
Grid.Column="1"
Foreground="White"
Text="{Binding DisplayValue}"
VerticalAlignment="Center"
TextTrimming="CharacterEllipsis"
TextWrapping="NoWrap"
Margin="20,0"/>
</Grid> </Grid>
</Border> </Border>
</DataTemplate> </DataTemplate>
@ -64,15 +45,12 @@
<ListBox.ContextMenu> <ListBox.ContextMenu>
<ContextMenu> <ContextMenu>
<MenuItem Header="Add New Password" Click="CreatePassword_OnClick"/> <MenuItem Header="Add New Password" Click="CreatePassword_OnClick"/>
<MenuItem Header="Hide/Unhide Passwords" Click="ToggleHide_OnClick"/> <MenuItem Header="Remove Password" Click="DeletePassword_OnClick"/>
</ContextMenu> </ContextMenu>
</ListBox.ContextMenu> </ListBox.ContextMenu>
<ListBox.Styles> <ListBox.Styles>
<Style Selector="ListBoxItem:selected /template/ ContentPresenter"> <Style Selector="ListBoxItem:selected /template/ ContentPresenter">
<Setter Property="Background" Value="#40000000"/> <Setter Property="Background" Value="#35313d"/>
</Style>
<Style Selector="ListBoxItem:pointerover /template/ ContentPresenter">
<Setter Property="Background" Value="#20000000"></Setter>
</Style> </Style>
<Style Selector="ListBoxItem"> <Style Selector="ListBoxItem">
<Setter Property="Padding" Value="0"/> <Setter Property="Padding" Value="0"/>
@ -80,40 +58,23 @@
</Style> </Style>
</ListBox.Styles> </ListBox.Styles>
</ListBox> </ListBox>
</Border> </Border>
<Border Background="#80000000" Name="AddPasswordContainer" IsVisible="False" PointerPressed="OuterBorder_OnPointerPressed" ZIndex="11"> <Border Background="#80000000" Name="AddPasswordContainer" IsVisible="False">
<Border Background="#80000000" CornerRadius="10" PointerPressed="InnerBorder_OnPointerPressed" <Border Margin="50" Background="#2b2f36" CornerRadius="10">
Name="AddPasswordBorder"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Height="300"
Width="300">
<StackPanel Spacing="10" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="20"> <StackPanel Spacing="10" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="20">
<TextBlock Text="Name:" Margin="20,0"/> <TextBlock Text="Name:" Margin="20,0"/>
<TextBox Name="PasswordName" <TextBox Name="PasswordName" Margin="20,0" HorizontalAlignment="Stretch" VerticalAlignment="Center" KeyDown="DialogKeyDown"/>
Margin="20,0"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
KeyDown="DialogKeyDown"/>
<TextBlock Text="Password:" Margin="20,0"/> <TextBlock Text="Password:" Margin="20,0"/>
<TextBox Name="PasswordValue" <TextBox Name="PasswordValue" Margin="20,0" HorizontalAlignment="Stretch" VerticalAlignment="Center" KeyDown="DialogKeyDown"/>
Margin="20,0"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
KeyDown="DialogKeyDown"
PasswordChar="*"/>
<TextBlock Text="Repeat Password:" Margin="20,0"/> <TextBlock Text="Repeat Password:" Margin="20,0"/>
<TextBox Name="PasswordRepeat" <TextBox Name="PasswordRepeat" Margin="20,0" HorizontalAlignment="Stretch" VerticalAlignment="Center" KeyDown="DialogKeyDown"/>
Margin="20,0"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
KeyDown="DialogKeyDown"
PasswordChar="*"/>
<TextBlock Name="ErrorTextBlock" IsVisible="False" HorizontalAlignment="Center" Foreground="Crimson"/>
<Button Name="PasswordSave" Click="PasswordSave_OnClick" HorizontalAlignment="Center" VerticalAlignment="Center" <Button Name="PasswordSave" Click="PasswordSave_OnClick" HorizontalAlignment="Center" VerticalAlignment="Center"
Content="Confirm"/> Content="Confirm"/>
</StackPanel> </StackPanel>
</Border> </Border>
</Border> </Border>
</Grid> </Grid>
</Panel> </Panel>

View file

@ -20,15 +20,13 @@ public partial class MainWindow : Window
this.TransparencyLevelHint = new[] { WindowTransparencyLevel.None }; this.TransparencyLevelHint = new[] { WindowTransparencyLevel.None };
this.Background = new SolidColorBrush(Color.Parse(ColorScheme.Surface.Color_1)); this.Background = new SolidColorBrush(Color.Parse(ColorScheme.Surface.Color_1));
this.ContentBorder.Background = new SolidColorBrush(Color.Parse(ColorScheme.Surface.Color_2)); this.ContentBorder.Background = new SolidColorBrush(Color.Parse(ColorScheme.Surface.Color_2));
this.AddPasswordBorder.Background = new SolidColorBrush(Color.Parse(ColorScheme.Surface.Color_2)); AcrylicBorderObject.IsVisible = false;
this.MiddleSeperator.IsVisible = true;
this.AcrylicBorderObject.IsVisible = false;
} }
else else
{ {
this.TransparencyLevelHint = new[] { WindowTransparencyLevel.AcrylicBlur }; this.TransparencyLevelHint = new[] { WindowTransparencyLevel.AcrylicBlur };
this.Background = Brushes.Transparent; this.Background = Brushes.Transparent;
this.AcrylicBorderObject.IsVisible = true; AcrylicBorderObject.IsVisible = true;
} }
} }
public MainWindow(string masterPassword) public MainWindow(string masterPassword)
@ -47,8 +45,7 @@ public partial class MainWindow : Window
if (Path.GetExtension(file).ToLower() == ".wx") if (Path.GetExtension(file).ToLower() == ".wx")
{ {
Password pw = new Password(file); Password pw = new Password(file);
if(!String.IsNullOrEmpty(pw.Value)) passwords.Add(pw);
passwords.Add(pw);
} }
else else
{ {
@ -68,7 +65,11 @@ public partial class MainWindow : Window
} }
} }
private void Button_OnClick(object? sender, RoutedEventArgs e)
{
censorPasswords = !censorPasswords;
FetchPasswords();
}
private void PasswordList_OnSelectionChanged(object? sender, SelectionChangedEventArgs e) private void PasswordList_OnSelectionChanged(object? sender, SelectionChangedEventArgs e)
{ {
@ -82,23 +83,12 @@ public partial class MainWindow : Window
private void DeletePassword_OnClick(object? sender, RoutedEventArgs e) private void DeletePassword_OnClick(object? sender, RoutedEventArgs e)
{ {
if (PasswordList.SelectedItem is Password password) throw new NotImplementedException();
{
File.Delete(password.WxFile.Path);
FetchPasswords();
}
}
private void ToggleHide_OnClick(object? sender, RoutedEventArgs e)
{
censorPasswords = !censorPasswords;
FetchPasswords();
} }
private void ErrorMessage(string message) private void ErrorMessage(string message)
{ {
ErrorTextBlock.Text = message; //TODO: Show Error in GUI
ErrorTextBlock.IsVisible = true;
} }
private void SavePassword() private void SavePassword()
@ -120,17 +110,7 @@ public partial class MainWindow : Window
} }
Password newPassword = new Password(PasswordName.Text, PasswordValue.Text); Password newPassword = new Password(PasswordName.Text, PasswordValue.Text);
FetchPasswords(); FetchPasswords();
ResetPasswordModal();
}
private void ResetPasswordModal()
{
AddPasswordContainer.IsVisible = false; AddPasswordContainer.IsVisible = false;
PasswordName.Text = "";
PasswordValue.Text = "";
PasswordRepeat.Text = "";
ErrorTextBlock.IsVisible = false;
} }
private void PasswordSave_OnClick(object? sender, RoutedEventArgs e) private void PasswordSave_OnClick(object? sender, RoutedEventArgs e)
@ -145,13 +125,4 @@ public partial class MainWindow : Window
SavePassword(); SavePassword();
} }
} }
private void OuterBorder_OnPointerPressed(object? sender, PointerPressedEventArgs e)
{
ResetPasswordModal();
}
private void InnerBorder_OnPointerPressed(object sender, PointerPressedEventArgs e)
{
e.Handled = true;
}
} }

View file

@ -9,12 +9,12 @@ public class Password
{ {
public string Name { get; set; } public string Name { get; set; }
public string Value { get; set; } public string Value { get; set; }
public string CensoredValue { get; set; } = "**********"; public string CensoredValue { get; set; } = "******";
public WXFile WxFile { get; set; } public WXFile WxFile { get; set; }
public string DisplayValue public string DisplayValue
{ {
get => MainWindow.censorPasswords ? CensoredValue : Value; get => MainWindow.censorPasswords ? Value : CensoredValue;
} }
public Password(string name, string value) public Password(string name, string value)

View file

@ -9,9 +9,7 @@
Title="Cryptura" Title="Cryptura"
CanResize="False" CanResize="False"
Width="430" Width="430"
Height="170" Height="170">
Loaded="Control_OnLoaded"
WindowStartupLocation="CenterScreen">
<Panel> <Panel>
<ExperimentalAcrylicBorder IsHitTestVisible="False" Name="AcrylicBorderObject"> <ExperimentalAcrylicBorder IsHitTestVisible="False" Name="AcrylicBorderObject">
<ExperimentalAcrylicBorder.Material> <ExperimentalAcrylicBorder.Material>
@ -24,6 +22,7 @@
</ExperimentalAcrylicBorder> </ExperimentalAcrylicBorder>
<Border Background="#80000000" CornerRadius="10" Margin="10" Name="ContentBorder"> <Border Background="#80000000" CornerRadius="10" Margin="10" Name="ContentBorder">
<StackPanel Spacing="10" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="20"> <StackPanel Spacing="10" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="20">
<TextBlock Text="Enter Master password" HorizontalAlignment="Center" VerticalAlignment="Center"/> <TextBlock Text="Enter Master password" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBox Name="MasterPasswordBox" HorizontalAlignment="Center" VerticalAlignment="Center" Width="300" PasswordChar="*" KeyDown="MasterPasswordBox_OnKeyDown"/> <TextBox Name="MasterPasswordBox" HorizontalAlignment="Center" VerticalAlignment="Center" Width="300" PasswordChar="*" KeyDown="MasterPasswordBox_OnKeyDown"/>
<Button Name="MasterPasswordConfirm" Content="Confirm" Click="MasterPasswordConfirm_OnClick" HorizontalAlignment="Center" VerticalAlignment="Center"/> <Button Name="MasterPasswordConfirm" Content="Confirm" Click="MasterPasswordConfirm_OnClick" HorizontalAlignment="Center" VerticalAlignment="Center"/>

View file

@ -32,6 +32,10 @@ public partial class PasswordWindow : Window
AdjustThemeToPlatform(); AdjustThemeToPlatform();
} }
private void WindowBase_OnResized(object? sender, WindowResizedEventArgs e)
{
Console.WriteLine(e.ClientSize);
}
private void ConfirmPassword() private void ConfirmPassword()
{ {
@ -50,9 +54,4 @@ public partial class PasswordWindow : Window
ConfirmPassword(); ConfirmPassword();
} }
} }
private void Control_OnLoaded(object? sender, RoutedEventArgs e)
{
MasterPasswordBox.Focus();
}
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB