public async Task <FullLoginResult> TokenPostAsync(string email, string masterPassword) { Kdf = KdfType.PBKDF2_SHA256; KdfIterations = 5000; var preloginResponse = await _accountsApiRepository.PostPreloginAsync( new PreloginRequest { Email = email }); if (preloginResponse.Succeeded) { Kdf = preloginResponse.Result.Kdf; KdfIterations = preloginResponse.Result.KdfIterations; } var result = new FullLoginResult(); var normalizedEmail = email.Trim().ToLower(); var key = _cryptoService.MakeKeyFromPassword(masterPassword, normalizedEmail, Kdf, KdfIterations); var request = new TokenRequest { Email = normalizedEmail, MasterPasswordHash = _cryptoService.HashPasswordBase64(key, masterPassword), Device = new DeviceRequest(_appIdService, _deviceInfoService) }; var twoFactorToken = _tokenService.GetTwoFactorToken(normalizedEmail); if (!string.IsNullOrWhiteSpace(twoFactorToken)) { request.Token = twoFactorToken; request.Provider = TwoFactorProviderType.Remember; request.Remember = false; } var response = await _connectApiRepository.PostTokenAsync(request); if (!response.Succeeded) { result.Success = false; result.ErrorMessage = response.Errors.FirstOrDefault()?.Message; return(result); } result.Success = true; if (response.Result.TwoFactorProviders2 != null && response.Result.TwoFactorProviders2.Count > 0) { result.Key = key; result.MasterPasswordHash = request.MasterPasswordHash; result.TwoFactorProviders = response.Result.TwoFactorProviders2; return(result); } await ProcessLoginSuccessAsync(key, response.Result); return(result); }
public LoginTwoFactorPage(string email, FullLoginResult result, TwoFactorProviderType?type = null) : base(updateActivity: false) { _deviceInfoService = Resolver.Resolve <IDeviceInfoService>(); _email = email; _result = result; _masterPasswordHash = result.MasterPasswordHash; _key = result.Key; _providers = result.TwoFactorProviders; _providerType = type ?? GetDefaultProvider(); _authService = Resolver.Resolve <IAuthService>(); _userDialogs = Resolver.Resolve <IUserDialogs>(); _syncService = Resolver.Resolve <ISyncService>(); _googleAnalyticsService = Resolver.Resolve <IGoogleAnalyticsService>(); _twoFactorApiRepository = Resolver.Resolve <ITwoFactorApiRepository>(); _pushNotification = Resolver.Resolve <IPushNotification>(); Init(); }
public LoginTwoFactorPage(string email, FullLoginResult result, TwoFactorProviderType?type = null) : base(updateActivity: false, requireAuth: false) { _duoOrgTitle = $"Duo ({AppResources.Organization})"; _deviceInfoService = Resolver.Resolve <IDeviceInfoService>(); _email = email; _result = result; _masterPasswordHash = result.MasterPasswordHash; _key = result.Key; _providers = result.TwoFactorProviders; _providerType = type ?? GetDefaultProvider(); _deviceActionService = Resolver.Resolve <IDeviceActionService>(); _authService = Resolver.Resolve <IAuthService>(); _syncService = Resolver.Resolve <ISyncService>(); _appSettingsService = Resolver.Resolve <IAppSettingsService>(); _googleAnalyticsService = Resolver.Resolve <IGoogleAnalyticsService>(); _twoFactorApiRepository = Resolver.Resolve <ITwoFactorApiRepository>(); _pushNotification = Resolver.Resolve <IPushNotificationService>(); Init(); }
public async Task <FullLoginResult> TokenPostAsync(string email, string masterPassword) { var result = new FullLoginResult(); var normalizedEmail = email.Trim().ToLower(); var key = _cryptoService.MakeKeyFromPassword(masterPassword, normalizedEmail); var request = new TokenRequest { Email = normalizedEmail, MasterPasswordHash = _cryptoService.HashPasswordBase64(key, masterPassword), Device = new DeviceRequest(_appIdService, _deviceInfoService) }; var response = await _connectApiRepository.PostTokenAsync(request); if (!response.Succeeded) { result.Success = false; result.ErrorMessage = response.Errors.FirstOrDefault()?.Message; return(result); } result.Success = true; if (response.Result.TwoFactorProviders != null && response.Result.TwoFactorProviders.Count > 0) { result.Key = key; result.MasterPasswordHash = request.MasterPasswordHash; result.TwoFactorRequired = true; return(result); } await ProcessLoginSuccessAsync(key, response.Result); return(result); }