예제 #1
0
        /// <summary>
        /// Saves the credentials.
        /// </summary>
        /// <param name="credentials">Credentials.</param>
        public void SaveCredentials(KeychainModel credentials)
        {
            if (!this.AreCredentialsValid())
            {
                this.DeleteCredentials();

                Account account = new Account
                {
                    Username = credentials.Username
                };
                account.Properties.Add(GrosvenorConstants.Password, credentials.Password);
                account.Properties.Add(GrosvenorConstants.AccessToken, credentials.AccessToken);
                account.Properties.Add(GrosvenorConstants.RefreshToken, credentials.RefreshToken);
                account.Properties.Add(GrosvenorConstants.AccessTokenExpireDate, credentials.AccessTokenExpireDate.ToString());
                account.Properties.Add(GrosvenorConstants.UserId, credentials.UserId.ToString());
                AccountStore.Create(Forms.Context).Save(account, App.AppName);
            }
        }
예제 #2
0
        /// <summary>
        /// The get Keychain Model.
        /// </summary>
        /// <returns>The <see cref="KeychainModel" />.</returns>
        public KeychainModel GetCredentials()
        {
            var account = AccountStore.Create(Forms.Context).FindAccountsForService(App.AppName).FirstOrDefault();

            if (account != null)
            {
                var credentials = new KeychainModel()
                {
                    Username              = account.Username,
                    Password              = account.Properties[GrosvenorConstants.Password],
                    AccessToken           = account.Properties[GrosvenorConstants.AccessToken],
                    RefreshToken          = account.Properties[GrosvenorConstants.RefreshToken],
                    AccessTokenExpireDate = Convert.ToDateTime(account.Properties[GrosvenorConstants.AccessTokenExpireDate]),
                    UserId = Guid.Parse(account.Properties[GrosvenorConstants.UserId])
                };
                return(credentials);
            }
            else
            {
                //something to do with null
                return(null);
            }
        }
        public async Task <BaseFacadeResponseModel <LoginResponseModel> > Login(BaseFacadeRequestModelWithContent <LoginRequestModel> model)
        {
            var apiRequestModel = Mapper.Map <LoginApiRequestModel>(model.Content);

            var authResponse = await _authenticationHelperWrapper.GetUserToken(model.Content.Email, model.Content.Password, model.Content.ApplicationUsesRefreshTokens);

            if (authResponse == null || authResponse.IsError)
            {
                //log unsuccessful login attempt
                var addLogEntryApiRequestModel = new AddLogEntryApiRequestModel
                {
                    StatusCode = 404,
                    Date       = DateTime.Now,
                    Type       = "Login attempt",
                    IpAddress  = model.Content.IpAddress,
                    Message    = "A failed login attempt occurred using the email address " + model.Content.Email
                };

                //Todo: log addLogEntryApiRequestModel

                if (authResponse != null)
                {
                    return(new BaseFacadeResponseModel <LoginResponseModel>
                    {
                        //authResponse.Json.GetValue("error_description");
                        Message =
                            authResponse.Json.GetValue("error_description")
                            .ToString(),     //"The username or password entered was incorrect. Please check your details and try again.",
                        StatusCode = System.Net.HttpStatusCode.Unauthorized
                    });
                }
            }

            var runner = await _authenticationHelperWrapper.TraverseReauth(() => _authApi.Login(authResponse.AccessToken, apiRequestModel), authResponse.RefreshToken);

            //generic helper that sets up the return object
            var runnerResponse = await new ApiRunnerResponseHelper().ReturnRunnerResponse(runner, new LoginResponseModel(), new LoginApiResponseModel());

            var mappedFacadeResponse = (runnerResponse.FacadeResponseModel as BaseFacadeResponseModel <LoginResponseModel>);

            mappedFacadeResponse.AccessToken  = authResponse.AccessToken;
            mappedFacadeResponse.RefreshToken = authResponse.RefreshToken ?? string.Empty;

            //here we need to translate the api content response into the UI response
            if (runnerResponse.ApiContentResponseModelContent != null)
            {
                var apiResponse = (runnerResponse.ApiContentResponseModelContent as LoginApiResponseModel);
                mappedFacadeResponse.Content = new LoginResponseModel
                {
                    UserDetails       = apiResponse.UserDetails,
                    VerificationToken = apiResponse.VerificationToken,
                    UserId            = apiResponse.UserDetails.UserId
                };
            }
            else
            {
                //log unsuccessful login attempt
                var addLogEntryApiRequestModel = new AddLogEntryApiRequestModel
                {
                    StatusCode = 404,
                    Date       = DateTime.Now,
                    Type       = "Login attempt",
                    IpAddress  = model.Content.IpAddress,
                    Message    = "A failed login attempt occurred using the email address " + model.Content.Email
                };

                //Todo: reinstate this log entry
                //await _logApi.AddLogEntry();
            }

            var Credentials = new KeychainModel()
            {
                Username              = model.Content.Email,
                Password              = model.Content.Password,
                AccessToken           = mappedFacadeResponse.AccessToken,
                RefreshToken          = mappedFacadeResponse.RefreshToken,
                AccessTokenExpireDate = DateTime.Now.AddMinutes(20),
                UserId = mappedFacadeResponse.Content.UserId
            };

            this.keychainService.SaveCredentials(Credentials);

            return(mappedFacadeResponse);
        }
 public void SaveCredentials(KeychainModel credentials)
 {
     this.model = credentials;
 }
 public void DeleteCredentials()
 {
     this.model = null;
 }