Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
0
 public async Task <ApiResult <TokenResponse> > TokenPostAsync(TokenRequest request)
 {
     // TODO: move more logic in here
     return(await _connectApiRepository.PostTokenAsync(request));
 }