From a42f756d7822a11535ffe0b7fd7fe505e39123a1 Mon Sep 17 00:00:00 2001 From: Rene Schwarz Date: Sat, 3 Apr 2021 23:52:00 +0200 Subject: [PATCH] complete login function and login window also add attached properties and helper classes for securestring --- .../DesignTimeBuild/.dtbcache.v2 | Bin 79385 -> 79385 bytes .vs/Server Dashboard/v16/.suo | Bin 83968 -> 110592 bytes Server Dashboard/App.config | 9 +++ Server Dashboard/App.xaml | 11 +++- .../AttachedProperty/BaseAttachedProperty.cs | 20 ++++++ .../AttachedProperty/PasswordBoxProperties.cs | 30 +++++++++ Server Dashboard/Database/DatabaseHandler.cs | 24 ++++++- Server Dashboard/LoginWindow.xaml | 11 ++-- Server Dashboard/LoginWindow.xaml.cs | 6 +- .../Security/SecureStringHelpers.cs | 22 +++++++ Server Dashboard/Server Dashboard.csproj | 9 ++- .../ViewModels/Interfaces/IHavePassword.cs | 10 +++ Server Dashboard/ViewModels/LoginViewModel.cs | 57 ++++++++++++++-- .../Debug/netcoreapp3.1/Server Dashboard.dll | Bin 37376 -> 44032 bytes .../netcoreapp3.1/Server Dashboard.dll.config | 9 +++ .../Debug/netcoreapp3.1/Server Dashboard.pdb | Bin 15432 -> 17556 bytes .../obj/Debug/netcoreapp3.1/App.baml | Bin 5634 -> 5825 bytes .../obj/Debug/netcoreapp3.1/App.g.cs | 2 +- .../obj/Debug/netcoreapp3.1/App.g.i.cs | 2 +- .../GeneratedInternalTypeHelper.g.cs | 62 ++++++++++++++++++ .../GeneratedInternalTypeHelper.g.i.cs | 62 ++++++++++++++++++ .../obj/Debug/netcoreapp3.1/LoginWindow.baml | Bin 4092 -> 4689 bytes .../obj/Debug/netcoreapp3.1/LoginWindow.g.cs | 30 +++++++-- .../Debug/netcoreapp3.1/LoginWindow.g.i.cs | 30 +++++++-- ...r Dashboard.csproj.CoreCompileInputs.cache | 2 +- ...rver Dashboard.csproj.FileListAbsolute.txt | 2 + ...er Dashboard.csprojAssemblyReference.cache | Bin 424 -> 424 bytes .../Debug/netcoreapp3.1/Server Dashboard.dll | Bin 37376 -> 44032 bytes .../Server Dashboard.g.resources | Bin 26545 -> 27333 bytes .../Debug/netcoreapp3.1/Server Dashboard.pdb | Bin 15432 -> 17556 bytes .../Server Dashboard_MarkupCompile.cache | 2 +- .../Server Dashboard_MarkupCompile.i.cache | 2 +- 32 files changed, 377 insertions(+), 37 deletions(-) create mode 100644 Server Dashboard/App.config create mode 100644 Server Dashboard/AttachedProperty/BaseAttachedProperty.cs create mode 100644 Server Dashboard/AttachedProperty/PasswordBoxProperties.cs create mode 100644 Server Dashboard/Security/SecureStringHelpers.cs create mode 100644 Server Dashboard/ViewModels/Interfaces/IHavePassword.cs create mode 100644 Server Dashboard/bin/Debug/netcoreapp3.1/Server Dashboard.dll.config create mode 100644 Server Dashboard/obj/Debug/netcoreapp3.1/GeneratedInternalTypeHelper.g.cs create mode 100644 Server Dashboard/obj/Debug/netcoreapp3.1/GeneratedInternalTypeHelper.g.i.cs diff --git a/.vs/Server Dashboard/DesignTimeBuild/.dtbcache.v2 b/.vs/Server Dashboard/DesignTimeBuild/.dtbcache.v2 index be66e0f7b97d353b4c901eeb7473842da0d4fb65..76a16cbc45ffdddad5bcc545ea769de156f13396 100644 GIT binary patch delta 283 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

J%(F*s!Z2Fg!z7)Po@OQsm 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 delta 7761 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 diff --git a/Server Dashboard/App.config b/Server Dashboard/App.config new file mode 100644 index 0000000..a4ef717 --- /dev/null +++ b/Server Dashboard/App.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Server Dashboard/App.xaml b/Server Dashboard/App.xaml index 36df237..e4da259 100644 --- a/Server Dashboard/App.xaml +++ b/Server Dashboard/App.xaml @@ -12,8 +12,8 @@ - - + + @@ -26,6 +26,8 @@ + + + + diff --git a/Server Dashboard/AttachedProperty/BaseAttachedProperty.cs b/Server Dashboard/AttachedProperty/BaseAttachedProperty.cs new file mode 100644 index 0000000..55ae5e3 --- /dev/null +++ b/Server Dashboard/AttachedProperty/BaseAttachedProperty.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; + +namespace Server_Dashboard { + public abstract class BaseAttachedProperty + where Parent : BaseAttachedProperty, new() { + public event Action ValueChanged = (sender, e) => { }; + public static Parent Instance { get; private set; } = new Parent(); + public static readonly DependencyProperty ValueProperty = DependencyProperty.RegisterAttached("Value", typeof(Property), typeof(BaseAttachedProperty), new PropertyMetadata(new PropertyChangedCallback(OnValuePropertyChanged))); + private static void OnValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { + Instance.OnValueChanged(d, e); + Instance.ValueChanged(d, e); + } + public static Property GetValue(DependencyObject d) => (Property)d.GetValue(ValueProperty); + public static void SetValue(DependencyObject d, Property value) => d.SetValue(ValueProperty, value); + public virtual void OnValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { } + } +} diff --git a/Server Dashboard/AttachedProperty/PasswordBoxProperties.cs b/Server Dashboard/AttachedProperty/PasswordBoxProperties.cs new file mode 100644 index 0000000..c564c2d --- /dev/null +++ b/Server Dashboard/AttachedProperty/PasswordBoxProperties.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using System.Windows.Controls; + +namespace Server_Dashboard { + public class MonitorPasswordProperty : BaseAttachedProperty { + public override void OnValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { + var passwordBox = sender as PasswordBox; + if (passwordBox == null) + return; + passwordBox.PasswordChanged -= PasswordBox_PasswordChanged; + + if ((bool)e.NewValue) { + HasTextProperty.SetValue(passwordBox); + passwordBox.PasswordChanged += PasswordBox_PasswordChanged; + } + } + + private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e) { + HasTextProperty.SetValue((PasswordBox)sender); + } + } + public class HasTextProperty : BaseAttachedProperty { + public static void SetValue(DependencyObject sender) { + SetValue(sender, ((PasswordBox)sender).SecurePassword.Length < 1); + } + } +} diff --git a/Server Dashboard/Database/DatabaseHandler.cs b/Server Dashboard/Database/DatabaseHandler.cs index 1b2bdf0..d7459e7 100644 --- a/Server Dashboard/Database/DatabaseHandler.cs +++ b/Server Dashboard/Database/DatabaseHandler.cs @@ -2,19 +2,37 @@ using System; using System.Collections.Generic; using System.Configuration; +using System.Data; using System.Data.SqlClient; using System.Reflection; namespace Server_Dashboard { - class DatabaseHandler { + public static class DatabaseHandler { + + public static bool CheckLogin(string uname, string passwd) { + string valid = "False"; + ConnectToDatabase(con => { + string query = "EXEC ValidateUserLogin @Username = @uname, @Password = @passwd, @Valid = @valid OUTPUT"; + using (SqlCommand com = new SqlCommand(query, con)) { + com.Parameters.AddWithValue("@uname", uname); + com.Parameters.AddWithValue("@passwd", passwd); + com.Parameters.Add("@valid", SqlDbType.NVarChar, 250); + com.Parameters["@valid"].Direction = ParameterDirection.Output; + com.ExecuteNonQuery(); + valid = Convert.ToString(com.Parameters["@Valid"].Value); + } + }); + return Convert.ToBoolean(valid); + } + #region Private methods ///

/// Opens a database connection /// /// Callback type SqlConnection /// - private SqlConnection ConnectToDatabase(Action callback) { - using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Co2AuswertungDB"].ConnectionString)) { + private static SqlConnection ConnectToDatabase(Action callback) { + using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ServerDashboardDB"].ConnectionString)) { try { con.Open(); callback(con); diff --git a/Server Dashboard/LoginWindow.xaml b/Server Dashboard/LoginWindow.xaml index fe4b101..827960b 100644 --- a/Server Dashboard/LoginWindow.xaml +++ b/Server Dashboard/LoginWindow.xaml @@ -5,6 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:local="clr-namespace:Server_Dashboard" + x:Name="Login" mc:Ignorable="d" Title="Server Dashboard" Height="700" Width="500" WindowStyle="None" ResizeMode="NoResize" Background="Transparent" AllowsTransparency="True"> @@ -15,7 +16,8 @@ - + + @@ -61,11 +63,12 @@ - - + + -