- add: TFA think

This commit is contained in:
2025-02-01 18:19:18 +03:00
parent 77956d35f3
commit 32fd63c5f3
16 changed files with 351 additions and 148 deletions

View File

@@ -31,7 +31,7 @@
ItemsSource="{Binding Accounts}"
Padding="0">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type pages:AuthLoginPasswordModel}">
<DataTemplate DataType="{x:Type pages:ProfileAuthCredentials}">
<Border
Background="{StaticResource DefaultBackground}"
BoxShadow="0 1 15 -2 #121212"

View File

@@ -0,0 +1,39 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:popup="clr-namespace:Nebula.Launcher.ViewModels.Popup"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Nebula.Launcher.Views.Popup.TfaView">
<Design.DataContext>
<popup:TfaViewModel />
</Design.DataContext>
<StackPanel HorizontalAlignment="Stretch" Spacing="25" VerticalAlignment="Center">
<Label HorizontalAlignment="Center">You have two-factor authentication enabled. Please enter the code.</Label>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="10" x:Name="TContainer">
<Border BoxShadow="{StaticResource DefaultShadow}">
<TextBox MaxLength="1"/>
</Border>
<Border BoxShadow="{StaticResource DefaultShadow}">
<TextBox MaxLength="1"/>
</Border>
<Border BoxShadow="{StaticResource DefaultShadow}">
<TextBox MaxLength="1"/>
</Border>
<Border BoxShadow="{StaticResource DefaultShadow}">
<TextBox MaxLength="1"/>
</Border>
<Border BoxShadow="{StaticResource DefaultShadow}">
<TextBox MaxLength="1"/>
</Border>
<Border BoxShadow="{StaticResource DefaultShadow}">
<TextBox MaxLength="1"/>
</Border>
</StackPanel>
<Border BoxShadow="{StaticResource DefaultShadow}" Background="{StaticResource DefaultSelected}" HorizontalAlignment="Center">
<Button Click="Button_OnClick">
<Label HorizontalAlignment="Center" Margin="15,5,15,5">OK</Label>
</Button>
</Border>
</StackPanel>
</UserControl>

View File

@@ -0,0 +1,100 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using Nebula.Launcher.ViewModels.Popup;
namespace Nebula.Launcher.Views.Popup;
public partial class TfaView : UserControl
{
public List<TextBox> Boxes = new();
public TfaView()
{
InitializeComponent();
foreach (var textBox in TContainer.Children.Select(UnzipBox))
{
var currIndex = Boxes.Count;
Boxes.Add(textBox);
textBox.TextChanged += (_,_) => OnTextChanged(currIndex);
textBox.PastingFromClipboard += OnPasteFromClipboard;
textBox.KeyUp += (sender, args) =>
{
if (args.Key == Key.Back && string.IsNullOrEmpty(textBox.Text)) OnTextChanged(currIndex);
};
textBox.KeyDown += (sender, args) =>
{
textBox.Text = args.KeySymbol;
textBox.SelectionStart = 1;
//OnTextChanged(currIndex);
};
}
}
private void OnPasteFromClipboard(object? sender, RoutedEventArgs e)
{
// TODO: CLIPBOARD THINK
}
private void OnTextChanged(int index)
{
var box = Boxes[index];
if (string.IsNullOrEmpty(box.Text))
{
if(index == 0) return;
index--;
}
else
{
if(!int.TryParse(box.Text, out var _))
{
box.Text = "";
return;
}
if (index == 5)
{
CheckupCode();
return;
}
index++;
}
Boxes[index].Focus();
}
private void CheckupCode()
{
var str = "";
foreach (var vtTextBox in Boxes)
{
if(string.IsNullOrEmpty(vtTextBox.Text)) return;
str += vtTextBox.Text;
}
((TfaViewModel)DataContext!).OnTfaEnter(str);
}
private TextBox UnzipBox(Control control)
{
var box = (Border)control;
return (TextBox)box.Child!;
}
public TfaView(TfaViewModel tfaViewModel) : this()
{
DataContext = tfaViewModel;
}
private void Button_OnClick(object? sender, RoutedEventArgs e)
{
CheckupCode();
}
}

View File

@@ -228,7 +228,7 @@
</StackPanel>
</Border>
<StackPanel
Grid.Column="2"
Grid.Column="3"
Grid.Row="1"
IsVisible="{Binding ExpandInfo}"
Margin="5,5,0,0"