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);
        }
Example #2
0
        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();
        }
Example #3
0
        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();
        }
Example #4
0
        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);
        }