@ -7,6 +7,7 @@ using System.Linq;
using System.Threading ;
using System.Threading.Tasks ;
using SteamKit2 ;
using SteamKit2.Authentication ;
using SteamKit2.Internal ;
namespace DepotDownloader
@ -53,7 +54,6 @@ namespace DepotDownloader
bool bAborted ;
bool bExpectingDisconnectRemote ;
bool bDidDisconnect ;
bool bDidReceiveLoginKey ;
bool bIsConnectionRecovery ;
int connectionBackoff ;
int seq ; // more hack fixes
@ -79,7 +79,6 @@ namespace DepotDownloader
this . bAborted = false ;
this . bExpectingDisconnectRemote = false ;
this . bDidDisconnect = false ;
this . bDidReceiveLoginKey = false ;
this . seq = 0 ;
this . AppTokens = new Dictionary < uint , ulong > ( ) ;
@ -112,7 +111,6 @@ namespace DepotDownloader
this . callbacks . Subscribe < SteamUser . SessionTokenCallback > ( SessionTokenCallback ) ;
this . callbacks . Subscribe < SteamApps . LicenseListCallback > ( LicenseListCallback ) ;
this . callbacks . Subscribe < SteamUser . UpdateMachineAuthCallback > ( UpdateMachineAuthCallback ) ;
this . callbacks . Subscribe < SteamUser . LoginKeyCallback > ( LoginKeyCallback ) ;
Console . Write ( "Connecting to Steam3..." ) ;
@ -419,7 +417,6 @@ namespace DepotDownloader
bExpectingDisconnectRemote = false ;
bDidDisconnect = false ;
bIsConnectionRecovery = false ;
bDidReceiveLoginKey = false ;
}
void Connect ( )
@ -466,23 +463,6 @@ namespace DepotDownloader
steamClient . Disconnect ( ) ;
}
public void TryWaitForLoginKey ( )
{
if ( logonDetails . Username = = null | | ! credentials . LoggedOn | | ! ContentDownloader . Config . RememberPassword ) return ;
var totalWaitPeriod = DateTime . Now . AddSeconds ( 3 ) ;
while ( true )
{
var now = DateTime . Now ;
if ( now > = totalWaitPeriod ) break ;
if ( bDidReceiveLoginKey ) break ;
callbacks . RunWaitAllCallbacks ( TimeSpan . FromMilliseconds ( 100 ) ) ;
}
}
private void WaitForCallbacks ( )
{
callbacks . RunWaitCallbacks ( TimeSpan . FromSeconds ( 1 ) ) ;
@ -496,7 +476,7 @@ namespace DepotDownloader
}
}
private void ConnectedCallback ( SteamClient . ConnectedCallback connected )
private async void ConnectedCallback ( SteamClient . ConnectedCallback connected )
{
Console . WriteLine ( " Done!" ) ;
bConnecting = false ;
@ -508,7 +488,37 @@ namespace DepotDownloader
}
else
{
Console . Write ( "Logging '{0}' into Steam3..." , logonDetails . Username ) ;
Console . WriteLine ( "Logging '{0}' into Steam3..." , logonDetails . Username ) ;
if ( logonDetails . Username ! = null & & logonDetails . Password ! = null & & logonDetails . AccessToken is null )
{
try
{
var session = await steamClient . Authentication . BeginAuthSessionViaCredentialsAsync ( new SteamKit2 . Authentication . AuthSessionDetails
{
Username = logonDetails . Username ,
Password = logonDetails . Password ,
IsPersistentSession = ContentDownloader . Config . RememberPassword ,
Authenticator = new UserConsoleAuthenticator ( ) ,
} ) ;
var result = await session . PollingWaitForResultAsync ( ) ;
DebugLog . WriteLine ( nameof ( Steam3Session ) , "Completed authentication initialization, got access token." ) ;
// Assume that we get back the same username, no need to reset it.
logonDetails . Password = null ;
logonDetails . AccessToken = result . RefreshToken ;
AccountSettingsStore . Instance . LoginTokens [ result . AccountName ] = result . RefreshToken ;
AccountSettingsStore . Save ( ) ;
}
catch ( Exception ex )
{
Console . Error . WriteLine ( "Failed to authenticate with Steam: " + ex . Message ) ;
Abort ( false ) ;
}
}
steamUser . LogOn ( logonDetails ) ;
}
}
@ -553,14 +563,14 @@ namespace DepotDownloader
{
var isSteamGuard = loggedOn . Result = = EResult . AccountLogonDenied ;
var is2FA = loggedOn . Result = = EResult . AccountLoginDeniedNeedTwoFactor ;
var is LoginKey = ContentDownloader . Config . RememberPassword & & logonDetails . LoginKey ! = null & & loggedOn . Result = = EResult . InvalidPassword ;
var is AccessToken = ContentDownloader . Config . RememberPassword & & logonDetails . AccessToken ! = null & & loggedOn . Result = = EResult . InvalidPassword ; // TODO: Get EResult for bad access token
if ( isSteamGuard | | is2FA | | is LoginKey )
if ( isSteamGuard | | is2FA | | is AccessToken )
{
bExpectingDisconnectRemote = true ;
Abort ( false ) ;
if ( ! is LoginKey )
if ( ! is AccessToken )
{
Console . WriteLine ( "This account is protected by Steam Guard." ) ;
}
@ -573,23 +583,15 @@ namespace DepotDownloader
logonDetails . TwoFactorCode = Console . ReadLine ( ) ;
} while ( String . Empty = = logonDetails . TwoFactorCode ) ;
}
else if ( is LoginKey )
else if ( is AccessToken )
{
AccountSettingsStore . Instance . Login Key s. Remove ( logonDetails . Username ) ;
AccountSettingsStore . Instance . Login Token s. Remove ( logonDetails . Username ) ;
AccountSettingsStore . Save ( ) ;
logonDetails . LoginKey = null ;
if ( ContentDownloader . Config . SuppliedPassword ! = null )
{
Console . WriteLine ( "Login key was expired. Connecting with supplied password." ) ;
logonDetails . Password = ContentDownloader . Config . SuppliedPassword ;
}
else
{
Console . Write ( "Login key was expired. Please enter your password: " ) ;
logonDetails . Password = Util . ReadPassword ( ) ;
}
// TODO: Handle gracefully by falling back to password prompt?
Console . WriteLine ( "Access token was rejected." ) ;
Abort ( false ) ;
return ;
}
else
{
@ -699,17 +701,5 @@ namespace DepotDownloader
// send off our response
steamUser . SendMachineAuthResponse ( authResponse ) ;
}
private void LoginKeyCallback ( SteamUser . LoginKeyCallback loginKey )
{
Console . WriteLine ( "Accepted new login key for account {0}" , logonDetails . Username ) ;
AccountSettingsStore . Instance . LoginKeys [ logonDetails . Username ] = loginKey . LoginKey ;
AccountSettingsStore . Save ( ) ;
steamUser . AcceptNewLoginKey ( loginKey ) ;
bDidReceiveLoginKey = true ;
}
}
}