public async Task <CacheItem> ExecuteAsync(JwtContainer jwtContainer, CacheItem relatedItem) { var userData = _jwtService.GetDataFromJwt <UserProfileData>(jwtContainer.Jwt).Data; await _recoveryHandler.RemoveConnectionsAsync(userData.PublicKey); // TODO: remove? classic flow if (!_coreConfiguration.OverwriteFields) { userData.Profile = null; } // TODO: code duplication var recoveryToken = !string.IsNullOrEmpty(userData.RecoveryData) ? Guid.NewGuid().ToString("N") : null; await _recoveryHandler.OnRecoverAsync(userData.DID, new OwnIdConnection { PublicKey = userData.PublicKey, RecoveryToken = recoveryToken, RecoveryData = userData.RecoveryData, AuthType = relatedItem.AuthCookieType == CookieType.Passcode ? ConnectionAuthType.Passcode : ConnectionAuthType.Basic }); return(await _cacheItemRepository.UpdateAsync(relatedItem.Context, item => { item.RecoveryToken = recoveryToken; item.RecoveryData = userData.RecoveryData; item.FinishFlow(relatedItem.DID, userData.PublicKey); })); }