Licensed auth WIP

Slowly adding methods and variables to build licensed minecraft instance
This commit is contained in:
Max Chaev 2025-02-25 22:42:41 +03:00
parent 1e725f5933
commit 45ffb1dfbb
6 changed files with 214 additions and 3 deletions

View File

@ -1,5 +1,4 @@
using System;
using System.IO;
using CmlLib.Core; using CmlLib.Core;
using CmlLib.Core.Auth; using CmlLib.Core.Auth;
using XboxAuthNet.Game.Msal; using XboxAuthNet.Game.Msal;
@ -43,6 +42,7 @@ static public class Utils
Console.WriteLine(deviceCode.Message); Console.WriteLine(deviceCode.Message);
return Task.CompletedTask; return Task.CompletedTask;
})); }));
authenticator.AddMsalOAuth(app, msal => msal.Silent());
authenticator.AddXboxAuthForJE(xbox => xbox.Basic()); authenticator.AddXboxAuthForJE(xbox => xbox.Basic());
authenticator.AddJEAuthenticator(); authenticator.AddJEAuthenticator();
return await authenticator.ExecuteForLauncherAsync(); return await authenticator.ExecuteForLauncherAsync();

View File

@ -24,4 +24,9 @@ public class LauncherUtils
await loading.RunMinecraft(); await loading.RunMinecraft();
return; return;
} }
private static async Task CreateLicensedMinecraftInstance()
{
}
} }

View File

@ -15,4 +15,21 @@ public partial class MainWindowViewModel : ViewModelBase
private string? _runtimeLocation = ConfigManager.ReadConfig("runtime-path"); private string? _runtimeLocation = ConfigManager.ReadConfig("runtime-path");
public string? RuntimeLocation { get => _runtimeLocation; set { _runtimeLocation = value; OnPropertyChanged(nameof(RuntimeLocation)); } } public string? RuntimeLocation { get => _runtimeLocation; set { _runtimeLocation = value; OnPropertyChanged(nameof(RuntimeLocation)); } }
// Session information
private string? _loginMethod = ConfigManager.ReadConfig("login-method");
public string? LoginMethod { get => _loginMethod; set { _loginMethod = value; OnPropertyChanged(nameof(LoginMethod)); } }
private string? _accsessToken = ConfigManager.ReadConfig("accsess-token");
public string? AccsesToken { get => _accsessToken; set { _accsessToken = value; OnPropertyChanged(nameof(AccsesToken)); } }
private string? _clientToken = ConfigManager.ReadConfig("client-token");
public string? ClientToken { get => _clientToken; set { _clientToken = value; OnPropertyChanged(nameof(ClientToken)); } }
private string? _uuid = ConfigManager.ReadConfig("uuid");
public string? UUID { get => _uuid; set { _uuid = value; OnPropertyChanged(nameof(UUID)); } }
// Tweaks managment
private string? _tweaksVersion = ConfigManager.ReadConfig("tweaks-version");
public string? TweaksVersion { get => _tweaksVersion; set { _tweaksVersion = value; OnPropertyChanged(nameof(TweaksVersion)); } }
} }

View File

@ -85,7 +85,12 @@ public partial class MainWindow : Window
private void OnAccountSettingsPressed(object sender, RoutedEventArgs e) private void OnAccountSettingsPressed(object sender, RoutedEventArgs e)
{ {
//todo: account managment window if (sender is not Image img) return;
if (img.GetVisualRoot() is not MainWindow root) return;
SessionManagmentWindow sessionManager = new(DataContext as MainWindowViewModel);
sessionManager.Show(root);
} }
} }

View File

@ -0,0 +1,144 @@
<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"
mc:Ignorable="d"
d:DesignWidth="500"
d:DesignHeight="400"
x:Class="LauncherGUI.Views.SessionManagmentWindow"
Icon="/Assets/Sprites/icon.png"
Title="Account manager"
RequestedThemeVariant="Dark"
Width="500"
Height="400"
MinWidth="500"
MinHeight="400"
MaxWidth="500"
MaxHeight="400"
Background="#353535"
>
<StackPanel>
<Border
Width="500"
Background="#94a285"
Padding="10"
HorizontalAlignment="Center"
>
<StackPanel>
<TextBlock
Text="Current session info"
FontFamily="{StaticResource QuicksandFont}"
HorizontalAlignment="Center"
/>
<StackPanel Orientation="Horizontal">
<TextBlock
Text="Session nickname: "
FontFamily="{StaticResource QuicksandFont}"
/>
<TextBlock x:Name="currentNickname" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock
Text="Session login method: "
FontFamily="{StaticResource QuicksandFont}"
/>
<TextBlock x:Name="loginMethod" />
</StackPanel>
</StackPanel>
</Border>
<!-- This is quite junky, but It should look simillar. -->
<Border
Width="500"
Background="#504254"
Padding="10"
HorizontalAlignment="Center"
>
<TextBlock
Text="OFFLINE METHOD"
FontFamily="{StaticResource QuicksandFont}"
HorizontalAlignment="Center"
/>
</Border>
<Border
Width="500"
Background="#504254"
Padding="10"
HorizontalAlignment="Center"
>
<StackPanel HorizontalAlignment="Center">
<TextBlock
Text="Insert username:"
FontFamily="{StaticResource QuicksandFont}"
/>
<TextBox
x:Name="inputNickname"
Width="200"
HorizontalAlignment="Left"
/>
</StackPanel>
</Border>
<Border
Width="500"
Background="#542434"
Padding="10"
HorizontalAlignment="Center"
>
<TextBlock
Text="LICENSED METHOD"
FontFamily="{StaticResource QuicksandFont}"
HorizontalAlignment="Center"
/>
</Border>
<Border
Width="500"
Background="#542434"
Padding="10"
HorizontalAlignment="Center"
>
<StackPanel
Grid.Row="1"
Grid.Column="0"
Orientation="Horizontal"
HorizontalAlignment="Center"
>
<Image
Height="30"
Width="30"
Source="/Assets/Sprites/microsoft-logo.png"
Stretch="Uniform"
/>
<Button
Content="Login with Microsoft"
Click="OnMicrosoftLoginClick"
/>
</StackPanel>
</Border>
<Button
FontFamily="{StaticResource QuicksandFont}"
Content="Save"
HorizontalAlignment="Center"
Click="OnSaveButtonClick"
/>
</StackPanel>
</Window>

View File

@ -0,0 +1,40 @@
using System;
using Avalonia.Controls;
using Avalonia.Interactivity;
using LauncherGUI.ViewModels;
namespace LauncherGUI.Views;
using Plombir;
public partial class SessionManagmentWindow : Window
{
private MainWindowViewModel _mainWindowVM;
public SessionManagmentWindow(MainWindowViewModel mainWindowVM)
{
InitializeComponent();
_mainWindowVM = mainWindowVM;
inputNickname.Text = _mainWindowVM.Usernick; // setting default nickname.
currentNickname.Text = _mainWindowVM.Usernick;
loginMethod.Text = _mainWindowVM.LoginMethod;
}
private void OnSaveButtonClick(object sender, RoutedEventArgs e)
{
if (sender is not Button button) return;
_mainWindowVM.Usernick = inputNickname.Text;
Console.WriteLine($"Changing nickname to {inputNickname.Text}");
button.Content = "Saved!";
}
async private void OnMicrosoftLoginClick(object sender, RoutedEventArgs e)
{
var session = await Utils.GetLicensedSession();
_mainWindowVM.LoginMethod = "microsoft";
_mainWindowVM.Usernick = session.Username;
_mainWindowVM.UUID = session.UUID;
_mainWindowVM.AccsesToken = session.AccessToken;
_mainWindowVM.ClientToken = session.ClientToken;
}
}