mirror of
https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies.git
synced 2026-07-26 06:41:45 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 16f0cc2b2d | |||
| cd0416705f | |||
| 2d06cb81f9 | |||
| ed5d3c2eda | |||
| 07eb9f15a9 |
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"Website": "https://achiefy.pro/?nebula=true",
|
||||
"Documentation": "https://achiefy-project.gitbook.io/nebulaauth"
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"version": "1.8.5",
|
||||
"date": "2026-06-19",
|
||||
"changes": [
|
||||
{
|
||||
"type": "NEW",
|
||||
"text": "Bulk proxy assignment: assign proxies to multiple accounts at once via flexible login:proxy, login:ID or login-only input",
|
||||
"link": "https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/pull/22"
|
||||
},
|
||||
{
|
||||
"type": "NEW",
|
||||
"text": "Import dialog now allows assigning imported mafiles to a group directly; added option to skip confirmation when no conflicts are detected",
|
||||
"link": "https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/pull/24"
|
||||
},
|
||||
{
|
||||
"type": "NEW",
|
||||
"text": "Assign random free proxy to the account from context menu",
|
||||
"link": "https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/pull/22"
|
||||
},
|
||||
{
|
||||
"type": "NEW",
|
||||
"text": "Export: added ZIP archive output, export-all mode when the input field is empty, and support for login:password input format",
|
||||
"link": "https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/pull/28"
|
||||
},
|
||||
{
|
||||
"type": "IMPROVEMENT",
|
||||
"text": "When a session permanently expires during a user-initiated action, a login dialog is now shown instead of a generic error notification",
|
||||
"link": "https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/pull/29"
|
||||
},
|
||||
{
|
||||
"type": "IMPROVEMENT",
|
||||
"text": "Proxy manager: account count badges now show how many accounts are assigned to each proxy entry",
|
||||
"link": "https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/pull/22"
|
||||
},
|
||||
{
|
||||
"type": "IMPROVEMENT",
|
||||
"text": "Added login:pass@ip:port proxy format support",
|
||||
"link": "https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/pull/25"
|
||||
},
|
||||
{
|
||||
"type": "IMPROVEMENT",
|
||||
"text": "Improved dialog header design",
|
||||
"link": "https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/pull/27"
|
||||
},
|
||||
{
|
||||
"type": "IMPROVEMENT",
|
||||
"text": "Website and Documentation links are now available from the links window",
|
||||
"link": "https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/pull/30"
|
||||
},
|
||||
{
|
||||
"type": "FIX",
|
||||
"text": "Application no longer fails to start when Steam time synchronization is unavailable (network issues, firewall)"
|
||||
},
|
||||
{
|
||||
"type": "FIX",
|
||||
"text": "Fixed incorrect Steam Guard error message shown in the Mafile Mover dialog",
|
||||
"link": "https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/pull/23"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using NebulaAuth.Model;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace NebulaAuth.Core;
|
||||
|
||||
public static class LinksManager
|
||||
{
|
||||
private const string LINKS_URL =
|
||||
"https://raw.githubusercontent.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/master/NebulaAuth/links.json";
|
||||
|
||||
private static readonly HttpClient HttpClient = new();
|
||||
|
||||
public static string? WebsiteUrl { get; private set; }
|
||||
public static string? DocumentationUrl { get; private set; }
|
||||
|
||||
public static async Task FetchAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
var json = await HttpClient.GetStringAsync(LINKS_URL).ConfigureAwait(false);
|
||||
var links = JsonConvert.DeserializeObject<RemoteLinks>(json);
|
||||
WebsiteUrl = links?.Website;
|
||||
DocumentationUrl = links?.Documentation;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Shell.Logger.Debug(ex, "Failed to fetch remote links");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace NebulaAuth.Model;
|
||||
|
||||
public class RemoteLinks
|
||||
{
|
||||
public string? Website { get; set; }
|
||||
public string? Documentation { get; set; }
|
||||
}
|
||||
@@ -3,7 +3,6 @@ using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NebulaAuth.Core;
|
||||
using NebulaAuth.Model.Exceptions;
|
||||
using NebulaAuth.Model.MAAC;
|
||||
using NebulaAuth.Model.MafileExport;
|
||||
using NebulaAuth.Model.Mafiles;
|
||||
@@ -40,7 +39,8 @@ public static class Shell
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new CantAlignTimeException("", ex);
|
||||
Logger.Error(ex, "Failed to align time with Steam");
|
||||
TimeAligner.SetTimeDifference(0);
|
||||
}
|
||||
|
||||
var threads = Environment.ProcessorCount > 0 ? Environment.ProcessorCount : 1;
|
||||
@@ -48,6 +48,7 @@ public static class Shell
|
||||
ProxyAssignmentCache.Initialize(Storage.MaFiles);
|
||||
MAACStorage.Initialize();
|
||||
MafileExporterStorage.Initialize();
|
||||
_ = LinksManager.FetchAsync();
|
||||
|
||||
ExtensionsLogger.LogDebug("Application started");
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<SatelliteResourceLanguages>en;ru;ua</SatelliteResourceLanguages>
|
||||
<ApplicationIcon>Theme\lock.ico</ApplicationIcon>
|
||||
<SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>
|
||||
<AssemblyVersion>1.8.4</AssemblyVersion>
|
||||
<AssemblyVersion>1.8.5</AssemblyVersion>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
d:DesignHeight="450" d:DesignWidth="800"
|
||||
TextElement.Foreground="{DynamicResource BaseContentBrush}"
|
||||
Background="Transparent"
|
||||
RenderOptions.BitmapScalingMode="HighQuality">
|
||||
RenderOptions.BitmapScalingMode="HighQuality"
|
||||
Loaded="LinksView_Loaded">
|
||||
|
||||
<materialDesign:Card Padding="24" HorizontalAlignment="Center" VerticalAlignment="Center" UniformCornerRadius="12">
|
||||
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
|
||||
@@ -49,16 +50,20 @@
|
||||
</StackPanel>
|
||||
</Button>
|
||||
|
||||
<Button Margin="0,0,0,5" FontSize="18" Style="{StaticResource MaterialDesignFlatButton}"
|
||||
Click="Website_Click" IsEnabled="False">
|
||||
<Button x:Name="WebsiteButton" Margin="0,0,0,5" FontSize="18"
|
||||
Style="{StaticResource MaterialDesignFlatButton}"
|
||||
IsEnabled="False"
|
||||
Click="Website_Click">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
|
||||
<materialDesign:PackIcon Kind="Web" Width="24" Height="24" Margin="0 0 8 0" />
|
||||
<TextBlock Text="Web-site" VerticalAlignment="Center" />
|
||||
<TextBlock Text="Achiefy" VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
|
||||
<Button Margin="0,0,0,5" FontSize="18" Style="{StaticResource MaterialDesignFlatButton}"
|
||||
Click="Documentation_Click" IsEnabled="False">
|
||||
<Button x:Name="DocumentationButton" Margin="0,0,0,5" FontSize="18"
|
||||
Style="{StaticResource MaterialDesignFlatButton}"
|
||||
IsEnabled="False"
|
||||
Click="Documentation_Click">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
|
||||
<Viewbox Width="22" Height="22" Margin="0 0 8 0">
|
||||
<Canvas Width="22" Height="22">
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Diagnostics;
|
||||
using System.Diagnostics;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using MaterialDesignThemes.Wpf;
|
||||
@@ -13,6 +13,12 @@ public partial class LinksView : UserControl
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void LinksView_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
WebsiteButton.IsEnabled = LinksManager.WebsiteUrl != null;
|
||||
DocumentationButton.IsEnabled = LinksManager.DocumentationUrl != null;
|
||||
}
|
||||
|
||||
private void Telegram_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Process.Start(new ProcessStartInfo("https://t.me/nebulaauth") {UseShellExecute = true});
|
||||
@@ -26,12 +32,14 @@ public partial class LinksView : UserControl
|
||||
|
||||
private void Website_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Process.Start(new ProcessStartInfo("https://yourwebsite.com") {UseShellExecute = true});
|
||||
if (LinksManager.WebsiteUrl != null)
|
||||
Process.Start(new ProcessStartInfo(LinksManager.WebsiteUrl) {UseShellExecute = true});
|
||||
}
|
||||
|
||||
private void Documentation_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Process.Start(new ProcessStartInfo("https://yourwebsite.com") {UseShellExecute = true});
|
||||
if (LinksManager.DocumentationUrl != null)
|
||||
Process.Start(new ProcessStartInfo(LinksManager.DocumentationUrl) {UseShellExecute = true});
|
||||
}
|
||||
|
||||
private void CheckForUpdates_Click(object sender, RoutedEventArgs e)
|
||||
|
||||
@@ -80,7 +80,7 @@ public partial class ProxyManagerVM
|
||||
|
||||
resolvedProxy = new MaProxy(parsedId, byId);
|
||||
}
|
||||
else if (ProxyStorage.DefaultScheme.TryParse(proxyPart, out var parsedProxy))
|
||||
else if (ProxyStorage.DefaultScheme.TryParse(proxyPart, out var parsedProxy) || ProxyStorage.SignAtScheme.TryParse(proxyPart, out parsedProxy))
|
||||
{
|
||||
// Mode: login:proxy_string — find existing or add
|
||||
resolvedProxy = FindOrAddProxy(parsedProxy);
|
||||
|
||||
@@ -80,4 +80,10 @@ public static class TimeAligner
|
||||
client.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetTimeDifference(int timeDifference)
|
||||
{
|
||||
_timeDifference = timeDifference;
|
||||
_aligned = true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user