prework for implementing login
This commit is contained in:
parent
e3a34fa966
commit
f6e3687ec2
8 changed files with 339 additions and 2 deletions
|
@ -8,7 +8,7 @@ namespace WeeXnes.Core
|
|||
{
|
||||
public class Information
|
||||
{
|
||||
public const string Version = "4.4.6";
|
||||
public const string Version = "4.4.7";
|
||||
public const string EncryptionHash = "8zf5#RdyQ]$4x4_";
|
||||
public const string ApiUrl = "https://api.github.com/repos/weexnes/weexnessuite/releases/latest";
|
||||
}
|
||||
|
|
133
WeeXnes/Core/LoginLib.cs
Normal file
133
WeeXnes/Core/LoginLib.cs
Normal file
|
@ -0,0 +1,133 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Net.Http;
|
||||
using Newtonsoft.Json;
|
||||
using WeeXnes.Views.Settings;
|
||||
using Wpf.Ui.Appearance;
|
||||
using Wpf.Ui.Controls;
|
||||
|
||||
namespace WeeXnes.Core
|
||||
{
|
||||
|
||||
public class Auth
|
||||
{
|
||||
public BackgroundWorker _loginWorker { get; set; }
|
||||
public UpdateVar<dynamic> _currentUserCache { get; private set; } = new UpdateVar<dynamic>();
|
||||
private string _token { get; set; }
|
||||
private string _userDataUrl { get; set; }
|
||||
private string _loginUrl { get; set; }
|
||||
public string _email { get; set; }
|
||||
public string _password { private get; set; }
|
||||
public UpdateVar<Exception> ExceptionCache { get; private set; } = new UpdateVar<Exception>();
|
||||
|
||||
public Auth(string loginUrl, string userDataUrl)
|
||||
{
|
||||
this._currentUserCache.Value = null;
|
||||
this._loginWorker = new BackgroundWorker();
|
||||
this._loginWorker.WorkerReportsProgress = true;
|
||||
this._loginWorker.WorkerSupportsCancellation = true;
|
||||
this._loginWorker.DoWork += (sender, args) =>
|
||||
{
|
||||
try
|
||||
{
|
||||
Login(this._email, this._password);
|
||||
GetUserData();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.ExceptionCache.Value = ex;
|
||||
}
|
||||
};
|
||||
this._loginWorker.RunWorkerCompleted += (sender, args) =>
|
||||
{
|
||||
WeeXnes.Core.CustomConsole.WriteLine("LoginWorker complete");
|
||||
};
|
||||
this._loginUrl = loginUrl;
|
||||
this._userDataUrl = userDataUrl;
|
||||
}
|
||||
public string Login(string email, string password)
|
||||
{
|
||||
if (String.IsNullOrEmpty(email))
|
||||
throw new NullReferenceException();
|
||||
if (String.IsNullOrEmpty(password))
|
||||
throw new NullReferenceException();
|
||||
|
||||
using (HttpClient client = new HttpClient())
|
||||
{
|
||||
var postData = new Dictionary<string, string>
|
||||
{
|
||||
{ "email", email },
|
||||
{ "password", password }
|
||||
};
|
||||
|
||||
var content = new FormUrlEncodedContent(postData);
|
||||
|
||||
HttpResponseMessage response = client.PostAsync(_loginUrl, content).Result;
|
||||
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
string responseData = response.Content.ReadAsStringAsync().Result;
|
||||
dynamic jsonData = Newtonsoft.Json.JsonConvert.DeserializeObject(responseData);
|
||||
string token = jsonData.token;
|
||||
_token = token;
|
||||
return token;
|
||||
//Console.WriteLine($"Token: {token}");
|
||||
}
|
||||
else
|
||||
{
|
||||
WeeXnes.Core.CustomConsole.WriteLine("Error: " + response.StatusCode);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public dynamic GetUserData(string token = null)
|
||||
{
|
||||
if(String.IsNullOrEmpty(token))
|
||||
if (String.IsNullOrEmpty(_token))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
token = _token;
|
||||
}
|
||||
// Create an instance of HttpClient
|
||||
using (HttpClient client = new HttpClient())
|
||||
{
|
||||
// Add the token to the request headers
|
||||
client.DefaultRequestHeaders.Add("token", token);
|
||||
|
||||
// Send the GET request
|
||||
HttpResponseMessage response = client.GetAsync(_userDataUrl).Result;
|
||||
|
||||
// Check if the request was successful (status code 200)
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
// Read the response content as a string
|
||||
string responseData = response.Content.ReadAsStringAsync().Result;
|
||||
//Console.WriteLine(responseData);
|
||||
// Parse the JSON data into a dynamic object
|
||||
dynamic user = JsonConvert.DeserializeObject(responseData);
|
||||
user = user.user;
|
||||
// Now you can access the user object properties dynamically
|
||||
WeeXnes.Core.CustomConsole.WriteLine("authenticated user: " + user.name);
|
||||
//Console.WriteLine($"Email: {user.email}");
|
||||
// Access other properties as needed
|
||||
_currentUserCache.Value = user;
|
||||
return user;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Handle the error, e.g., print the status code
|
||||
_currentUserCache.Value = null;
|
||||
|
||||
WeeXnes.Core.CustomConsole.WriteLine("Error: " + response.StatusCode);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -9,6 +9,7 @@
|
|||
xmlns:settings="clr-namespace:WeeXnes.Views.Settings"
|
||||
xmlns:discordrpc="clr-namespace:WeeXnes.Views.DiscordRPC"
|
||||
xmlns:passwordGenerator="clr-namespace:WeeXnes.Views.PasswordGenerator"
|
||||
xmlns:profile="clr-namespace:WeeXnes.Views.ProfileView"
|
||||
mc:Ignorable="d"
|
||||
Height="400"
|
||||
Width="500"
|
||||
|
@ -90,6 +91,13 @@
|
|||
Name="ButtonPwGen"
|
||||
PageTag="Gen"
|
||||
PageType="{x:Type passwordGenerator:PasswordGenView}"/>
|
||||
<ui:NavigationItem
|
||||
Visibility="Collapsed"
|
||||
Content="Profile"
|
||||
Icon="InprivateAccount24"
|
||||
Name="ButtonProfile"
|
||||
PageTag="Profile"
|
||||
PageType="{x:Type profile:ProfileView}"/>
|
||||
</ui:NavigationStore.Items>
|
||||
<ui:NavigationStore.Footer>
|
||||
<ui:NavigationItem
|
||||
|
|
12
WeeXnes/Views/ProfileView/LoginView.xaml
Normal file
12
WeeXnes/Views/ProfileView/LoginView.xaml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<Page x:Class="WeeXnes.Views.ProfileView.LoginView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:local="clr-namespace:WeeXnes.Views.ProfileView"
|
||||
mc:Ignorable="d"
|
||||
Title="LoginView" Height="450" Width="800">
|
||||
<Grid>
|
||||
|
||||
</Grid>
|
||||
</Page>
|
12
WeeXnes/Views/ProfileView/LoginView.xaml.cs
Normal file
12
WeeXnes/Views/ProfileView/LoginView.xaml.cs
Normal file
|
@ -0,0 +1,12 @@
|
|||
using System.Windows.Controls;
|
||||
|
||||
namespace WeeXnes.Views.ProfileView
|
||||
{
|
||||
public partial class LoginView : Page
|
||||
{
|
||||
public LoginView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
78
WeeXnes/Views/ProfileView/ProfileView.xaml
Normal file
78
WeeXnes/Views/ProfileView/ProfileView.xaml
Normal file
|
@ -0,0 +1,78 @@
|
|||
<Page x:Class="WeeXnes.Views.ProfileView.ProfileView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:local="clr-namespace:WeeXnes.Views.ProfileView"
|
||||
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||
mc:Ignorable="d"
|
||||
Title="ProfileView" Height="Auto" Width="Auto"
|
||||
Loaded="ProfileView_OnLoaded"
|
||||
Unloaded="ProfileView_OnUnloaded">
|
||||
<Grid>
|
||||
<Grid Name="LoadingScreen" Visibility="Collapsed">
|
||||
<ui:LoadingScreen Background="Transparent"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
<StackPanel Orientation="Vertical" Name="ProfileContentPanel" Visibility="Collapsed">
|
||||
|
||||
<Border Height="40px" CornerRadius="5">
|
||||
<Border.Background>
|
||||
<ImageBrush
|
||||
Stretch="UniformToFill"
|
||||
x:Name="BannerBackground"/>
|
||||
</Border.Background>
|
||||
<Label Content="TestName" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||||
Foreground="White"
|
||||
FontSize="20px"
|
||||
Name="UsernameLabel">
|
||||
<Label.Effect>
|
||||
<DropShadowEffect
|
||||
ShadowDepth="0"
|
||||
Direction="0"
|
||||
Color="Black"
|
||||
Opacity="1"
|
||||
BlurRadius="3"/>
|
||||
</Label.Effect>
|
||||
</Label>
|
||||
|
||||
</Border>
|
||||
<Label Name="ProfileDesc" HorizontalAlignment="Center" Foreground="White" Padding="0,10,0,10"/>
|
||||
|
||||
<Separator/>
|
||||
<Label Content="" HorizontalAlignment="Center" Padding="0,0,0,0"/>
|
||||
<!-- Options for Account -->
|
||||
|
||||
<ui:CardAction Icon="MailInbox24"
|
||||
Name="InboxButton">
|
||||
<StackPanel>
|
||||
<TextBlock
|
||||
Margin="0,0,0,4"
|
||||
FontWeight="Medium"
|
||||
Text="Inbox" />
|
||||
<TextBlock
|
||||
FontSize="11"
|
||||
Foreground="{DynamicResource TextFillColorTertiaryBrush}"
|
||||
Text="Check your messages" />
|
||||
</StackPanel>
|
||||
</ui:CardAction>
|
||||
|
||||
<ui:CardAction Icon="Key24"
|
||||
Name="LicenseButton" Margin="0,5,0,0">
|
||||
<StackPanel>
|
||||
<TextBlock
|
||||
Margin="0,0,0,4"
|
||||
FontWeight="Medium"
|
||||
Text="Licenses" />
|
||||
<TextBlock
|
||||
FontSize="11"
|
||||
Foreground="{DynamicResource TextFillColorTertiaryBrush}"
|
||||
Text="See your currently active licenses for other Apps of mine (These are no purchasable licenses, these are access licenses only given to specific people for testing)"
|
||||
TextTrimming="CharacterEllipsis"/>
|
||||
</StackPanel>
|
||||
</ui:CardAction>
|
||||
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Page>
|
83
WeeXnes/Views/ProfileView/ProfileView.xaml.cs
Normal file
83
WeeXnes/Views/ProfileView/ProfileView.xaml.cs
Normal file
|
@ -0,0 +1,83 @@
|
|||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media.Imaging;
|
||||
using WeeXnes.Core;
|
||||
using WeeXnes.Views.Settings;
|
||||
|
||||
namespace WeeXnes.Views.ProfileView
|
||||
{
|
||||
public partial class ProfileView : Page
|
||||
{
|
||||
public static Auth auth = new Auth(
|
||||
"https://weexnes.dev:4000/login",
|
||||
"https://weexnes.dev:4000/user"
|
||||
);
|
||||
public ProfileView()
|
||||
{
|
||||
InitializeComponent();
|
||||
auth._email = "";
|
||||
auth._password = "";
|
||||
}
|
||||
private void ProfileView_OnLoaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
auth.ExceptionCache.ValueChanged += LoginWorkerException;
|
||||
auth._currentUserCache.ValueChanged += userCacheChanged;
|
||||
|
||||
WeeXnes.Core.CustomConsole.WriteLine("Event hooks loaded");
|
||||
if (auth._currentUserCache.Value == null)
|
||||
{
|
||||
LoadingScreen.Visibility = Visibility.Visible;
|
||||
auth._loginWorker.RunWorkerAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
ProfileContentPanel.Visibility = Visibility.Visible;
|
||||
}
|
||||
}
|
||||
|
||||
private void userCacheChanged()
|
||||
{
|
||||
if (auth._currentUserCache.Value != null)
|
||||
{
|
||||
this.Dispatcher.Invoke(() =>
|
||||
{
|
||||
LoadProfileToGui();
|
||||
ProfileContentPanel.Visibility = Visibility.Visible;
|
||||
LoadingScreen.Visibility = Visibility.Collapsed;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
ProfileContentPanel.Visibility = Visibility.Collapsed;
|
||||
LoadingScreen.Visibility = Visibility.Visible;
|
||||
}
|
||||
}
|
||||
|
||||
private void LoginWorkerException()
|
||||
{
|
||||
this.Dispatcher.Invoke(() =>
|
||||
{
|
||||
new FluentMessageBox(auth.ExceptionCache.Value.Message).ShowDialog();
|
||||
});
|
||||
}
|
||||
|
||||
private void LoadProfileToGui()
|
||||
{
|
||||
//Load Profile
|
||||
UsernameLabel.Content = Convert.ToString(auth._currentUserCache.Value.name);
|
||||
ProfileDesc.Content = Convert.ToString(auth._currentUserCache.Value.profileInfo.bio);
|
||||
BannerBackground.ImageSource =
|
||||
new BitmapImage(new Uri(Convert.ToString(auth._currentUserCache.Value.profileInfo.bannerUrl)));
|
||||
}
|
||||
|
||||
private void ProfileView_OnUnloaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
|
||||
auth.ExceptionCache.ValueChanged -= LoginWorkerException;
|
||||
auth._currentUserCache.ValueChanged -= userCacheChanged;
|
||||
|
||||
WeeXnes.Core.CustomConsole.WriteLine("Event hooks unloaded");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,7 +4,7 @@
|
|||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<Version>4.4.6</Version>
|
||||
<Version>4.4.7</Version>
|
||||
<ProjectGuid>{4B33CEE7-C74D-43B9-B99A-8B273D5195BC}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>WeeXnes</RootNamespace>
|
||||
|
@ -41,6 +41,7 @@
|
|||
<Reference Include="DiscordRPC, Version=1.0.175.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\DiscordRichPresence.1.0.175\lib\net35\DiscordRPC.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
|
@ -51,6 +52,7 @@
|
|||
<Reference Include="System.Drawing.Common, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Drawing.Common.6.0.0\lib\net461\System.Drawing.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xaml">
|
||||
|
@ -71,6 +73,7 @@
|
|||
<Compile Include="Core\CustomConsole.cs" />
|
||||
<Compile Include="Core\EncryptorLibrary.cs" />
|
||||
<Compile Include="Core\HandleLaunchArguments.cs" />
|
||||
<Compile Include="Core\LoginLib.cs" />
|
||||
<Compile Include="Core\RpcLogEvents.cs" />
|
||||
<Compile Include="Core\SaveSettingsHandler.cs" />
|
||||
<Compile Include="Core\WXFile.cs" />
|
||||
|
@ -103,6 +106,12 @@
|
|||
<Compile Include="Views\PasswordGenerator\SaveToKeyManagerView.xaml.cs">
|
||||
<DependentUpon>SaveToKeyManagerView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\ProfileView\LoginView.xaml.cs">
|
||||
<DependentUpon>LoginView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\ProfileView\ProfileView.xaml.cs">
|
||||
<DependentUpon>ProfileView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\Settings\ApiResponse.cs" />
|
||||
<Compile Include="Views\Settings\ChangePathsView.xaml.cs">
|
||||
<DependentUpon>ChangePathsView.xaml</DependentUpon>
|
||||
|
@ -141,6 +150,8 @@
|
|||
<Page Include="Views\PasswordGenerator\PasswordGenView.xaml" />
|
||||
<Page Include="Views\PasswordGenerator\SavePasswordView.xaml" />
|
||||
<Page Include="Views\PasswordGenerator\SaveToKeyManagerView.xaml" />
|
||||
<Page Include="Views\ProfileView\LoginView.xaml" />
|
||||
<Page Include="Views\ProfileView\ProfileView.xaml" />
|
||||
<Page Include="Views\Settings\ChangePathsView.xaml" />
|
||||
<Page Include="Views\Settings\FluentMessageBox.xaml" />
|
||||
<Page Include="Views\Settings\SettingsView.xaml" />
|
||||
|
|
Loading…
Add table
Reference in a new issue