コード例 #1
0
ファイル: OAuthWrapper.cs プロジェクト: riQQ/HearthSim.Common
        public async Task Authenticate(string successUrl = null, string errorUrl = null, params Scope[] scopes)
        {
            Log.Debug("Authenticating with HSReplay.net...");
            Authenticating?.Invoke(true);
            try
            {
                var data = await GetAuthData(successUrl ?? SuccessUrl, errorUrl ?? ErrorUrl);

                if (data == null)
                {
                    Log.Error("Authentication failed, received no data");
                    AuthenticationError?.Invoke(AuthenticationErrorType.Unknown);
                    return;
                }
                _data.Code        = data.Code;
                _data.RedirectUrl = data.RedirectUrl;
                _data.TokenData   = null;
            }
            catch (Exception e)
            {
                Log.Error(e);
                AuthenticationError?.Invoke(AuthenticationErrorType.Unknown);
                return;
            }
            Log.Debug("Authentication complete");
            try
            {
                await UpdateToken();

                Log.Debug("Claiming upload token if necessary");
                if (_account.TokenStatus == TokenStatus.Unknown)
                {
                    await _api.UpdateTokenStatus();
                }
                if (_account.TokenStatus == TokenStatus.Unclaimed)
                {
                    await ClaimUploadToken(_account.UploadToken);
                }
                Log.Debug("Updating account data");
                if (!await UpdateAccountData())
                {
                    AuthenticationError?.Invoke(AuthenticationErrorType.AccountData);
                }
            }
            catch (Exception e)
            {
                AuthenticationError?.Invoke(AuthenticationErrorType.Unknown);
                Log.Error(e);
            }
            finally
            {
                Authenticating?.Invoke(false);
                Authenticated?.Invoke();
            }
        }
コード例 #2
0
 public static async Task TryAuthenticate(string successUrl = null, string errorUrl = null)
 {
     Authenticating?.Invoke(true);
     if (await HSReplayNetOAuth.Authenticate(successUrl, errorUrl))
     {
         if (!await HSReplayNetOAuth.UpdateAccountData())
         {
             ErrorManager.AddError("HSReplay.net Error",
                                   "Could not load HSReplay.net account status."
                                   + " Please try again later.");
             AuthenticationError?.Invoke(AuthenticationErrorType.AccountData);
         }
         await SyncCollection();
     }
     else
     {
         ErrorManager.AddError("Could not authenticate with HSReplay.net",
                               "Please try running HDT as administrator "
                               + "(right-click the exe and select 'Run as administrator').\n"
                               + "If that does not help please try again later.", true);
         AuthenticationError?.Invoke(AuthenticationErrorType.Authentication);
     }
     Authenticating?.Invoke(false);
 }