示例#1
0
        public async Task <string> SignInWithTokenAsync(User storedUser, bool fireEvents = true)
        {
            try
            {
                LoggerService.Instance.Log("Account.SignInWithTokenAsync...");
                IsLoading = true;
                UserInfo  = null;

                if (storedUser == null)
                {
                    LoggerService.Instance.Log("ERROR: Account.SignInWithTokenAsync: cannot get stored account");
                    var error = "There was an error logging in";
                    if (fireEvents)
                    {
                        await Fire_OnSignInComplete(SignedIn, error, false, SignInAErrorType.LoginError);
                    }

                    return(error);
                }

                if (!storedUser.IsTokenExpired())
                {
                    LoggerService.Instance.Log("Account.SignInWithTokenAsync: account token NOT expired. reusing it");
                    UserInfo = storedUser;
                    await FetchUserCreditsAsync();

                    if (fireEvents)
                    {
                        await Fire_OnSignInComplete(SignedIn, null, false, SignInAErrorType.LoginError);
                    }

                    return(null);
                }

                var errorMessage = string.Empty;
                var response     = await LoginClient.LoginWithToken(storedUser.AuthToken);

                if (response != null)
                {
                    if (response.Success)
                    {
                        var newUser = response.Data.ToObject <User>();
                        newUser.Name = newUser.FirstName + "" + userInfo.LastName;
                        if (!string.IsNullOrEmpty(newUser.Token))
                        {
                            newUser.AuthToken = storedUser.AuthToken;
                            UserInfo          = newUser;

                            await FetchUserCreditsAsync();

                            UserStoreService.Instance.SaveUserCredentials(newUser);
                        }
                        else
                        {
                            LoggerService.Instance.Log("ERROR: Account.SignInWithTokenAsync: token is null");
                            errorMessage = "There was an error logging in";
                        }
                    }
                    else if (response.ErrorCode == ErrorCodes.AUTH_TOKEN_LOGIN)
                    {
                        //The auth token must be invalid - reset user info and request input
                        storedUser.Token     = null;
                        storedUser.AuthToken = null;
                        UserInfo             = null;

                        UserStoreService.Instance.SaveUserCredentials(storedUser);
                        errorMessage = response.ErrorMessageClean;
                    }
                    else
                    {
                        errorMessage = response.ErrorMessageClean;
                    }
                }
                else
                {
                    errorMessage = "There was an error logging in";
                }

                if (!string.IsNullOrEmpty(errorMessage))
                {
                    LoggerService.Instance.Log("ERROR: Account.SignInWithTokenAsync: " + errorMessage);
                }
                else
                {
                    LoggerService.Instance.Log("Account.SignInWithTokenAsync: success");
                }

                OnPropertyChanged("SignedIn");
                if (fireEvents)
                {
                    await Fire_OnSignInComplete(SignedIn, errorMessage, false, SignInAErrorType.LoginError);
                }

                return(errorMessage);
            }
            catch (ThrottleException ex)
            {
                return(ex.Message);
            }
            finally
            {
                IsLoading = false;
            }
        }