Compare commits

...

12 Commits

Author SHA1 Message Date
Давид Чернопятов bbcfe59f01 1.4.5 2024-02-01 16:36:52 +02:00
achiez e7c9473eb1 Add files via upload 2024-02-01 16:35:06 +02:00
achiez 06f28b4f76 Update README.md 2024-02-01 16:21:56 +02:00
Давид Чернопятов dd331bf18d update.xml updated 2024-02-01 03:13:44 +02:00
Давид Чернопятов fc143ad171 1.4.4 auto-update added 2024-02-01 03:06:56 +02:00
achiez b6bd81c1dd Add files via upload 2024-02-01 03:05:34 +02:00
achiez 5359882634 Create 1.3.4.html 2024-02-01 03:02:37 +02:00
achiez b7f00221a9 Delete changelog/changelog 1.3.4 2024-02-01 03:00:59 +02:00
achiez d69fa86708 Create changelog 1.3.4
1.3.4
2024-02-01 02:51:10 +02:00
Давид Чернопятов 3f9dda8f8d change update.xml 2024-02-01 02:08:15 +02:00
Давид Чернопятов 7586ce3d26 changed to update.xml 2024-02-01 02:03:58 +02:00
Давид Чернопятов 1230836912 Added update.json 2024-02-01 01:56:24 +02:00
17 changed files with 378 additions and 32 deletions
-12
View File
@@ -1,12 +0,0 @@
using System.Threading.Tasks;
namespace NebulaAuth.Core;
public static class UpdateManager
{
public static async Task CheckForUpdates()
{
}
}
+24
View File
@@ -0,0 +1,24 @@
using AutoUpdaterDotNET;
using NebulaAuth.Model;
using System;
using System.IO;
namespace NebulaAuth.Core;
public static class UpdateManager
{
private const string UPDATE_URL = "https://raw.githubusercontent.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/master/NebulaAuth/update.xml";
public static void CheckForUpdates()
{
string jsonPath = Path.Combine(Environment.CurrentDirectory, "update-settings.json");
AutoUpdater.PersistenceProvider = new JsonFilePersistenceProvider(jsonPath);
AutoUpdater.ShowSkipButton = false;
if (Settings.Instance.AllowAutoUpdate)
AutoUpdater.UpdateMode = Mode.ForcedDownload;
AutoUpdater.Start(UPDATE_URL);
}
}
+1 -1
View File
@@ -200,7 +200,7 @@
<TextBlock FontWeight="Normal" Text="{Binding SelectedMafile.Group, TargetNullValue=' ', FallbackValue=' ', Mode=OneWay}" />
</ToolBarPanel>
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Right" w:FontScaleWindow.Scale="0.7" w:FontScaleWindow.ResizeFont="True" Margin="0,0,10,0">
<Hyperlink NavigateUri="https://zelenka.guru/achies/" Foreground="{DynamicResource PrimaryHueMidBrush}" RequestNavigate="Hyperlink_OnRequestNavigate">by achies</Hyperlink>
<Hyperlink NavigateUri="https://github.com/achiez" Foreground="{DynamicResource PrimaryHueMidBrush}" RequestNavigate="Hyperlink_OnRequestNavigate">by achies</Hyperlink>
</TextBlock>
</Grid>
</Border>
+2 -2
View File
@@ -56,7 +56,7 @@ public static class MaClient
{
if (account.SessionData != null)
{
ClientHandler.CookieContainer.SetSteamMobileCookies(account.SessionData);
ClientHandler.CookieContainer.SetSteamMobileCookiesWithMobileToken(account.SessionData);
}
else
{
@@ -116,7 +116,7 @@ public static class MaClient
}
Storage.UpdateMafile(mafile);
ClientHandler.CookieContainer.SetSteamMobileCookies(mafile.SessionData);
ClientHandler.CookieContainer.SetSteamMobileCookiesWithMobileToken(mafile.SessionData);
}
public static Task<bool> SendConfirmation(Mafile mafile, Confirmation confirmation, bool confirm)
+1 -1
View File
@@ -82,7 +82,7 @@ public static class SessionHandler
try
{
await MaClient.RefreshSession(mafile);
SnackbarController.SendSnackbar("Сессия была обновлена автоматически");
SnackbarController.SendSnackbar(LocManager.GetCodeBehindOrDefault("SessionWasRefreshedAutomatically", "SessionHandler", "SessionWasRefreshedAutomatically"));
return true;
}
catch (SessionInvalidException)
+1 -1
View File
@@ -10,7 +10,7 @@
<SatelliteResourceLanguages>en;ru;ua</SatelliteResourceLanguages>
<ApplicationIcon>Theme\nebula lock.ico</ApplicationIcon>
<SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>
<AssemblyVersion>1.4.3</AssemblyVersion>
<AssemblyVersion>1.4.5</AssemblyVersion>
</PropertyGroup>
<ItemGroup>
+7 -10
View File
@@ -99,14 +99,12 @@
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<materialDesign:PackIcon VerticalAlignment="Center" Width="20" Height="20" Kind="ShoppingCart" Margin="0,0,10,0"></materialDesign:PackIcon>
<Image Grid.Column="1" VerticalAlignment="Center" DockPanel.Dock="Left" Width="32" Height="32" Source="{Binding ItemImageUri}" Margin="0,0,10,0"></Image>
<Border Grid.Column="1" Background="{DynamicResource MaterialDesignPaper}" MaxHeight="36" HorizontalAlignment="Center" BorderBrush="{DynamicResource PrimaryHueMidBrush}" BorderThickness="0.6" Margin="0,0,10,0">
<Image HorizontalAlignment="Center" VerticalAlignment="Center" MaxWidth="32" MaxHeight="32" Source="{Binding ItemImageUri}" ></Image>
</Border>
<Grid Grid.Column="2">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock VerticalAlignment="Center" x:Name="ItemName" theme:FontScaleWindow.ResizeFont="True" TextWrapping="WrapWithOverflow" Text="{Binding ItemName}" >
</TextBlock>
<TextBlock VerticalAlignment="Center" x:Name="ItemName" theme:FontScaleWindow.ResizeFont="True" TextWrapping="WrapWithOverflow" Text="{Binding ItemName}"/>
<TextBlock Grid.Row="1" Foreground="LightGray" Text="{Binding PriceString}">
<TextBlock.FontSize>
<Binding ElementName="ItemName" Path="FontSize" ConverterParameter="0.7">
@@ -166,10 +164,9 @@
</Grid.ColumnDefinitions>
<materialDesign:PackIcon VerticalAlignment="Center" Width="20" Height="20" Kind="ShoppingCartPlus" Margin="0,0,10,0"></materialDesign:PackIcon>
<TextBlock VerticalAlignment="Center" Grid.Column="1">
<Run Text="{Tr MainWindow.ConfirmationTemplates.Market}"/>
<Run Text="{Tr MainWindow.ConfirmationTemplates.Market, IsDynamic=False}"/>
<Run Text="{Binding Confirmations.Count, Mode=OneWay}"/>
<Run> </Run>
<Run Text="{Tr Common.Abbreviations.Count, IsDynamic=False}"/>
<Run Text="{Tr Common.Abbreviations.Count.Items, IsDynamic=False}"/>
</TextBlock>
<TextBlock VerticalAlignment="Center" Grid.Column="2" HorizontalAlignment="Left" Margin="5,0,0,0" Text="{Binding Time, StringFormat=t}"/>
+1
View File
@@ -41,6 +41,7 @@ public partial class MainVM : ObservableObject
QueryGroups();
SessionHandler.LoginStarted += SessionHandlerOnLoginStarted;
SessionHandler.LoginCompleted += SessionHandlerOnLoginCompleted;
UpdateManager.CheckForUpdates();
}
+1 -1
View File
@@ -140,7 +140,7 @@ public partial class LinkAccountVM : ObservableObject, IEmailProvider, IPhoneNum
IsFieldVisible = false;
HintText = string.Empty;
_sessionData = (MobileSessionData)await LoginV2Executor.DoLogin(_loginV2ExecutorOptions, userName, pass);
Handler.CookieContainer.SetSteamMobileCookies(_sessionData);
Handler.CookieContainer.SetSteamMobileCookiesWithMobileToken(_sessionData);
IsEmailCode = true;
}
catch (EResultException ex)
+7
View File
@@ -861,6 +861,13 @@
}
},
"SessionHandler": {
"SessionWasRefreshedAutomatically": {
"ru": "Сессия была обновлена автоматически",
"en": "Session was refreshed automatically",
"ua": "Сесія була оновлена автоматично"
}
},
"ProxyManagerVM": {
"WrongFormatSomeIdsMissing": {
"ru": "Неверный формат. Некоторые прокси не имеют ID",
+7
View File
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>1.4.5.0</version>
<url>https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/releases/download/1.4.5/NebulaAuth.1.4.5.zip</url>
<changelog>https://achiez.github.io/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/changelog/1.4.5.html</changelog>
<mandatory>false</mandatory>
</item>
+52 -1
View File
@@ -1 +1,52 @@
# NebulaAuth
# NebulaAuth
## Description
NebulaAuth is an application for emulating actions from the Steam Mobile App. Which replaces your smartphone when operating on Steam.
## Main advantages
- **Localization in three languages**: English, Russian and Ukrainian.
- **Full functionality of Steam Desktop Authenticator** reimagining [old app](https://github.com/Jessecar96/SteamDesktopAuthenticator)
- **Using a proxy**
- **Mafile grouping** for improved management.
- **Automatic confirmation of trades/trading platform** to save time.
- **Bulk import of map files** via Drag'n'Drop or CTRL+V for convenience.
- **Design customization** to personalize the interface.
- **Ability to confirm account login without entering a code** for easier access.
- **Auto-update** program to use the latest features.
- **Automatic relogin in case of problems with the session** for continuous operation.
## Installation
1. If the application does not start, you need to install [.net desktop runtime 8.0](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-aspnetcore-8.0.1-windows- x64-installer)
2. [Download the program from the releases of this repository on Github](https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/releases/latest)
* *For the safety of your data, download the application only from here*
4. Unpack the .zip file to any folder
5. Run the file **NebulaAuth.exe**
## Usage
- *Main window*
![gh-main-window-eng](https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/assets/106531132/15c0e870-1766-43a5-9e8c-2f34d5436beb)
1. Control panel.
- file management and settings
- account management (login, linking, unlinking)
- grouping
- proxy selection
- an indicator with a hint about the proxy used (lit either yellow or red, when hovered it will display additional information)
- timers for automatic confirmation of trade offers/sale offers on the marketplace
- how often to check confirmations when timers are enabled (in seconds)
2. List of your accounts
3. Login confirmation code (click to copy)
4. Main confirmation window
5. Search by login or SteamID (7xxxxxxxxxxxxx)
6. Confirm login from another device
7. Hyperlink to the official application page with attribution
## [License](/LICENSE.md)
Commercial use prohibited. When redistributing modified code, you must indicate the original authorship.
@@ -72,11 +72,45 @@ public static class AdmissionHelper
foreach (var domain in SteamDomains.AllDomains)
{
var token = mobileSession.GetToken(domain);
if (token == null) continue;
if (token == null || token.Value.IsExpired) continue;
AddTokenCookie(container, token.Value);
}
}
/// <summary>
/// Clear and set new session. Not recommended. Uses <see cref="IMobileSessionData.GetMobileToken()"/> for domain <see cref="SteamDomain.Community"/> instead of its own cookie. It's okay to use it only for confirmations. But Market, Trading and other pages won't be authenticated
/// </summary>
public static void SetSteamMobileCookiesWithMobileToken(this CookieContainer container, IMobileSessionData mobileSession,
string setLanguage = "english")
{
container.ClearSteamCookies(setLanguage);
container.AddMinimalMobileCookies();
AddRefreshToken(container, mobileSession.RefreshToken);
var community = SteamDomains.GetDomainUri(SteamDomain.Community);
container.Add(community, new Cookie("steamid", mobileSession.SteamId.Steam64.ToString()));
container.Add(community, new Cookie("sessionid", mobileSession.SessionId));
container.Add(community, new Cookie("Steam_Language", setLanguage));
TransferCommunityCookies(container);
var domainCookieSet = false;
foreach (var domain in SteamDomains.AllDomains)
{
var token = mobileSession.GetToken(domain);
if (token == null || token.Value.IsExpired) continue;
if(domain == SteamDomain.Community )
domainCookieSet = true;
AddTokenCookie(container, token.Value);
}
var mobileToken = mobileSession.GetMobileToken();
if (domainCookieSet == false && mobileToken is {IsExpired: false})
AddTokenCookie(container, SteamDomain.Community, mobileToken.Value);
}
public static void AddMinimalMobileCookies(this CookieContainer container)
{
@@ -146,7 +180,7 @@ public static class AdmissionHelper
}
private static void AddTokenCookie(CookieContainer container, SteamDomain domain, SteamAuthToken token)
{
var domainUri = SteamDomains.GetDomainUri(token.Domain);
var domainUri = SteamDomains.GetDomainUri(domain);
container.Add(domainUri, new Cookie(ACCESS_COOKIE_NAME, token.SignedToken)
{
HttpOnly = true,
+1 -1
View File
@@ -29,7 +29,7 @@ public static class ClientBuilder
}
else
{
container.SetSteamMobileCookies(sessionData);
container.SetSteamMobileCookiesWithMobileToken(sessionData);
}
ConfigureCommon(handler, client);
+78
View File
@@ -0,0 +1,78 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Changelog</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #eeeeee;
color: #333;
line-height: 1.6;
}
.changelog-container {
background-color: #fff;
border-radius: 10px;
padding: 25px;
margin: 25px auto;
max-width: 800px;
box-shadow: 0 5px 15px rgba(0,0,0,0.2);
}
.change {
margin-bottom: 20px;
padding: 0;
border-left: 4px solid #a50ec7;
background-color: #f9f9f9;
}
.version {
font-weight: 600;
font-size: 1.5em;
color: #a50ec7;
margin-left: 10px;
}
.date {
font-style: italic;
color: #888;
margin-bottom: 10px;
margin-left: 15px;
}
.description {
font-size: 1em;
padding: 0 15px;
}
.description ul {
list-style: inside square;
padding: 0;
}
@media only screen and (max-width: 600px) {
.changelog-container {
width: 90%;
margin: 25px auto;
padding: 25px;
}
}
</style>
</head>
<body>
<div class="changelog-container">
<!-- Changelog entry -->
<div class="change">
<div class="version">Version 1.3.4</div>
<div class="date">2024-02-01</div>
<div class="description">
- First release<br>
</div>
</div>
</div>
</body>
</html>
+78
View File
@@ -0,0 +1,78 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Changelog</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #eeeeee;
color: #333;
line-height: 1.6;
}
.changelog-container {
background-color: #fff;
border-radius: 10px;
padding: 25px;
margin: 25px auto;
max-width: 800px;
box-shadow: 0 5px 15px rgba(0,0,0,0.2);
}
.change {
margin-bottom: 20px;
padding: 0;
border-left: 4px solid #a50ec7;
background-color: #f9f9f9;
}
.version {
font-weight: 600;
font-size: 1.5em;
color: #a50ec7;
margin-left: 10px;
}
.date {
font-style: italic;
color: #888;
margin-bottom: 10px;
margin-left: 15px;
}
.description {
font-size: 1em;
padding: 0 15px;
}
.description ul {
list-style: inside square;
padding: 0;
}
@media only screen and (max-width: 600px) {
.changelog-container {
width: 90%;
margin: 25px auto;
padding: 25px;
}
}
</style>
</head>
<body>
<div class="changelog-container">
<!-- Changelog entry -->
<div class="change">
<div class="version">Version 1.4.3</div>
<div class="date">2024-02-01</div>
<div class="description">
- Auto-Update added<br>
</div>
</div>
</div>
</body>
</html>
+81
View File
@@ -0,0 +1,81 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Changelog</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #eeeeee;
color: #333;
line-height: 1.6;
}
.changelog-container {
background-color: #fff;
border-radius: 10px;
padding: 25px;
margin: 25px auto;
max-width: 800px;
box-shadow: 0 5px 15px rgba(0,0,0,0.2);
}
.change {
margin-bottom: 20px;
padding: 0;
border-left: 4px solid #a50ec7;
background-color: #f9f9f9;
}
.version {
font-weight: 600;
font-size: 1.5em;
color: #a50ec7;
margin-left: 10px;
}
.date {
font-style: italic;
color: #888;
margin-bottom: 10px;
margin-left: 15px;
}
.description {
font-size: 1em;
padding: 0 15px;
}
.description ul {
list-style: inside square;
padding: 0;
}
@media only screen and (max-width: 600px) {
.changelog-container {
width: 90%;
margin: 25px auto;
padding: 25px;
}
}
</style>
</head>
<body>
<div class="changelog-container">
<!-- Changelog entry -->
<div class="change">
<div class="version">Version 1.4.5</div>
<div class="date">2024-02-01</div>
<div class="description">
- Fixed crash when loading market confirmations cause <br>
- Fixed session handling <br>
- Small localization fixes <br>
- Small UI improvements
</div>
</div>
</div>
</body>
</html>