Browse Source

added web auth view

Veloe 1 year ago
parent
commit
97b5ca56de

+ 1 - 1
VeloeLauncherUpdater/VeloeLauncherUpdater.csproj

@@ -2,7 +2,7 @@
 
   <PropertyGroup>
 	  <OutputType>WinExe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net8.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
     <DebugType>embedded</DebugType>

+ 4 - 2
VeloeMinecraftLauncher/Program.cs

@@ -1,5 +1,6 @@
 using Avalonia;
 using Avalonia.ReactiveUI;
+using Avalonia.WebView.Desktop;
 using Serilog;
 using Serilog.Events;
 using System;
@@ -29,12 +30,13 @@ namespace VeloeMinecraftLauncher
             Settings.avaloniaLogger = logger;
             TraceListener listener = new SerilogTraceListener.SerilogTraceListener(logger);
             Trace.Listeners.Add(listener);
-            
+
             return AppBuilder.Configure<App>()
                     .UsePlatformDetect()
                     .WithInterFont()
                     .LogToTrace()
-                    .UseReactiveUI();
+                    .UseReactiveUI()
+                    .UseDesktopWebView();
         }
     }
 }

+ 22 - 15
VeloeMinecraftLauncher/VeloeMinecraftLauncher.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 	<PropertyGroup>
 		<OutputType>WinExe</OutputType>
-		<TargetFramework>net7.0</TargetFramework>
+		<TargetFramework>net8.0</TargetFramework>
 		<TieredCompilationQuickJit>false</TieredCompilationQuickJit>
 		<Nullable>enable</Nullable>
 		<TrimMode>partial</TrimMode>
@@ -9,9 +9,10 @@
 		<DebugType>embedded</DebugType>
 		<StartupObject>VeloeMinecraftLauncher.Program</StartupObject>
 		<PlatformTarget>x64</PlatformTarget>
-		<AssemblyVersion>1.4.0.101</AssemblyVersion>
-		<FileVersion>1.4.0.101</FileVersion>
+		<AssemblyVersion>1.5.0.20</AssemblyVersion>
+		<FileVersion>1.5.0.20</FileVersion>
 		<Configurations>Debug;Release</Configurations>
+		<ApplicationManifest>app.manifest</ApplicationManifest>
 	</PropertyGroup>
 	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
 		<NoWarn>NU1605</NoWarn>
@@ -32,27 +33,33 @@
 		<TrimmableAssembly Include="Avalonia.Themes.Default" />
 	</ItemGroup>
 	<ItemGroup>
-		<PackageReference Include="Avalonia" Version="11.0.4" />
-		<PackageReference Include="Avalonia.Controls.DataGrid" Version="11.0.4" />
-		<PackageReference Include="Avalonia.Desktop" Version="11.0.4" />
+		<PackageReference Include="Avalonia" Version="11.0.6" />
+		<PackageReference Include="Avalonia.Controls.DataGrid" Version="11.0.6" />
+		<PackageReference Include="Avalonia.Desktop" Version="11.0.6" />
 		<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
-		<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.4" />
-		<PackageReference Include="Avalonia.Fonts.Inter" Version="11.0.4" />
-		<PackageReference Include="Avalonia.ReactiveUI" Version="11.0.4" />
-		<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.4" />
-		<PackageReference Include="Avalonia.Xaml.Interactivity" Version="11.0.2" />
-		<PackageReference Include="Microsoft.AspNet.WebApi.Client" Version="5.2.9" />
-		<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="7.0.10" />
-		<PackageReference Include="ReactiveUI.Blazor" Version="19.4.1" />
+		<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.6" />
+		<PackageReference Include="Avalonia.Fonts.Inter" Version="11.0.6" />
+		<PackageReference Include="Avalonia.ReactiveUI" Version="11.0.6" />
+		<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.6" />
+		<PackageReference Include="Avalonia.Xaml.Interactivity" Version="11.0.6" />
+		<PackageReference Include="Microsoft.AspNet.WebApi.Client" Version="6.0.0" />
+		<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.0" />
 		<PackageReference Include="ReactiveUI.Validation" Version="3.1.7" />
-		<PackageReference Include="Serilog" Version="3.0.1" />
+		<PackageReference Include="Serilog" Version="3.1.1" />
 		<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
 		<PackageReference Include="SerilogTraceListener" Version="3.2.0" />
 		<PackageReference Include="System.Net.Http" Version="4.3.4" />
+		<PackageReference Include="WebView.Avalonia" Version="11.0.0.1" />
+		<PackageReference Include="WebView.Avalonia.Desktop" Version="11.0.0.1" />
+		<PackageReference Include="WebView.Avalonia.Linux" Version="11.0.0.1" />
+		<PackageReference Include="WebView.Avalonia.Windows" Version="11.0.0.1" />
 	</ItemGroup>
 	<ItemGroup>
 		<Compile Update="Views\MessageWindow.axaml.cs">
 			<DependentUpon>MessageWindow.axaml</DependentUpon>
 		</Compile>
+		<Compile Update="Views\AuthWebView.axaml.cs">
+		  <DependentUpon>AuthWebView.axaml</DependentUpon>
+		</Compile>
 	</ItemGroup>
 </Project>

+ 45 - 0
VeloeMinecraftLauncher/ViewModels/AuthWebViewModel.cs

@@ -0,0 +1,45 @@
+using Avalonia;
+using Avalonia.Controls;
+using ReactiveUI;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace VeloeMinecraftLauncher.ViewModels
+{
+    public class AuthWebViewModel : ViewModelBase
+    {
+        public AuthWebViewModel(AuthWebView view) 
+        {
+            webView = view;
+        }
+
+        private AuthWebView webView;
+        private string _url;
+
+        public string Token;
+        public string renewToken;
+
+        public string Url
+        {
+            get => _url;
+            set
+            {
+                this.RaiseAndSetIfChanged(ref _url, value);
+
+                //if auth success get key and close event
+                if (value.StartsWith("veloeApp"))
+                {
+
+                    webView?.Close();
+                }
+            }
+        }
+
+
+
+    }
+}

+ 24 - 0
VeloeMinecraftLauncher/ViewModels/SettingsWindowViewModel.cs

@@ -11,6 +11,7 @@ using Serilog.Events;
 using System.Linq;
 using ReactiveUI.Validation.Components;
 using Avalonia.Platform.Storage;
+using System.Diagnostics;
 
 namespace VeloeMinecraftLauncher.ViewModels;
 
@@ -166,6 +167,29 @@ public class SettingsWindowViewModel : ViewModelBase
         set => this.RaiseAndSetIfChanged(ref _maxLog, value);
     }
 
+    private string _microsoftOauthKey;
+    
+    public string MicrosoftOauthKey
+    {
+        get => _microsoftOauthKey;
+        set => this.RaiseAndSetIfChanged(ref _microsoftOauthKey, value);
+    }
+
+    public bool UseOfficialAccount = true;
+
+    public void LoginToAccount(object window)
+    {
+        var view = new AuthWebView();
+        var authViewModel = new AuthWebViewModel(view);
+        view.DataContext = authViewModel;
+
+        authViewModel.Url = "https://login.live.com/oauth20_authorize.srf?client_id=c94d0fda-6bda-48c2-9eed-3ade681c31d9&response_type=code&redirect_uri=veloeApp://auth&scope=XboxLive.signin%20offline_access&state=NOT_NEEDED";
+
+        view.ShowDialog((Window)window);
+
+        Debug.WriteLine(authViewModel.Url);
+    }
+
     public void SaveSettings()
     {
         Settings.javaPath = _javaPath;

+ 16 - 0
VeloeMinecraftLauncher/Views/AuthWebView.axaml

@@ -0,0 +1,16 @@
+<Window 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:vm="using:VeloeMinecraftLauncher.ViewModels"
+		xmlns:m="using:VeloeMinecraftLauncher.Models"
+		xmlns:entity="using:VeloeMinecraftLauncher.Models.Entity"
+		xmlns:utils="using:VeloeMinecraftLauncher.Utils"
+        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
+        x:Class="VeloeMinecraftLauncher.AuthWebView"
+        Title="Window1">
+  <Design.DataContext>
+        <vm:AuthWebViewModel/>
+  </Design.DataContext>
+	<WebView Url="{Binding Url}"></WebView>
+</Window>

+ 13 - 0
VeloeMinecraftLauncher/Views/AuthWebView.axaml.cs

@@ -0,0 +1,13 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+
+namespace VeloeMinecraftLauncher;
+
+public partial class AuthWebView : Window
+{
+    public AuthWebView()
+    {
+        InitializeComponent();
+    }
+}

+ 15 - 1
VeloeMinecraftLauncher/Views/SettingsWindow.axaml

@@ -94,7 +94,21 @@
 						<Button Grid.Row="5" Grid.ColumnSpan="2" Content="Open log" Command="{Binding OpenLogFile}"></Button>
 					</Grid>
 				</TabItem>
-				
+				<TabItem
+					Header="Account"
+					VerticalContentAlignment="Center">
+					<Grid Margin="10 0 10 5" ShowGridLines="false" RowDefinitions="Auto, Auto, Auto, Auto, Auto, Auto, Auto">
+
+						<Grid.ColumnDefinitions>
+							<ColumnDefinition Width="250"></ColumnDefinition>
+							<ColumnDefinition Width="*"></ColumnDefinition>
+							<ColumnDefinition Width="70"></ColumnDefinition>
+						</Grid.ColumnDefinitions>
+						<CheckBox Grid.Row="1" Grid.ColumnSpan="2" IsChecked="{Binding UseOfficialAccount}">Use MicrosoftAccount</CheckBox>
+						<Button Grid.Row="2" Grid.ColumnSpan="2" Content="Log in WebView" Command="{Binding LoginToAccount}" CommandParameter="{Binding $parent[Window]}"></Button>
+						<TextBlock Grid.Row="3" Text="{Binding MicrosoftOauthKey}"></TextBlock>
+					</Grid>
+				</TabItem>
 			</TabControl>
 			<Button Command="{Binding SaveSettings}" IsEnabled="{Binding IsValid}" Content="Save" VerticalAlignment="Bottom" Margin="10 0 0 10"></Button>
 			<TextBlock Text="{Binding LauncherVersion}" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0 0 10 10"></TextBlock>