Example #1
0
        public DataSourceEntity GetByExternalProvider(string externalProviderName)
        {
            if (string.IsNullOrEmpty(externalProviderName))
            {
                return(GetByEnum(DataSourceEnum.User));
            }

            return(m_cacheExternalDource.GetOrAdd(externalProviderName, key => m_dataSourceRepository.GetDataSourceByDataSource(
                                                      DataSourceEnum.ExternalLoginProvider,
                                                      m_externalLoginProviderRepository.GetExternalLoginProviderByName(
                                                          externalProviderName
                                                          ).Id
                                                      )));
        }
Example #2
0
        public virtual DataSourceEntity GetDataSourceByDataSource(DataSourceEnum dataSourceEnum, int externalLoginProviderId)
        {
            var dataSource = m_dataSourceRepository.GetDataSourceByDataSource(dataSourceEnum, externalLoginProviderId);

            return(dataSource);
        }
Example #3
0
 private void HydrateContactDataSource(UserContactEntity userContactEntity)
 {
     userContactEntity.DataSource = m_dataSourceRepository.GetDataSourceByDataSource(
         DataSourceEnum.User
         );
 }
Example #4
0
        private void HydrateUserData(
            DateTime now,
            UserEntity userEntity,
            IList <UserDataLoAModel> userData,
            IList <UserDataEntity> userDataToUpdate,
            IDictionary <string, UserDataEntity> userDataDict,
            IDictionary <string, UserDataTypeEntity> userDataTypesDict,
            string externalProviderName,
            UserDataEntity parentEntity = null
            )
        {
            if (userData == null)
            {
                return;
            }

            var levelOfAssuranceCache = new LevelOfAssuranceCache(m_levelOfAssuranceRepository);

            var dataSource = Lazy.Of(() =>
            {
                if (string.IsNullOrEmpty(externalProviderName))
                {
                    return(m_dataSourceRepository.GetDataSourceByDataSource(
                               DataSourceEnum.User
                               ));
                }

                var externalLoginProviderEntity = m_externalLoginProviderRepository.GetExternalLoginProviderByName(
                    externalProviderName
                    );

                return(m_dataSourceRepository.GetDataSourceByDataSource(
                           DataSourceEnum.ExternalLoginProvider,
                           externalLoginProviderEntity.Id
                           ));
            }
                                     );

            foreach (var dataEntityModel in userData)
            {
                var dataEntity = dataEntityModel.UserData;

                if (userDataDict != null && userDataDict.ContainsKey(dataEntity.UserDataType.DataTypeValue))
                {
                    var userDataEntity = userDataDict[dataEntity.UserDataType.DataTypeValue];

                    if (dataEntity.Value != userDataEntity.Value)
                    {
                        userDataEntity.LevelOfAssurance = levelOfAssuranceCache.GetByEnum(dataEntityModel.LevelOfAssuranceEnum);
                        userDataEntity.DataSource       = dataEntityModel.UserData.DataSource ?? dataSource.Value; //UserData generated by system, e.g. MasterUserId, has DataSource already set
                    }

                    userDataEntity.Value = dataEntity.Value;

                    if (dataEntity.ActiveTo == null || dataEntity.ActiveTo > now)
                    {
                        userDataEntity.ActiveTo = dataEntity.ActiveTo;
                    }
                    else
                    {
                        throw new InvalidOperationException("ActiveTo property of new UserData version must be null or greater than UtcNow");
                    }

                    userDataEntity.ParentUserData = parentEntity;

                    userDataToUpdate.Add(userDataEntity);

                    HydrateUserData(now,
                                    userEntity, dataEntity.ChildrenUserData?.Select(x => new UserDataLoAModel
                    {
                        UserData             = x,
                        LevelOfAssuranceEnum = dataEntityModel.LevelOfAssuranceEnum
                    }).ToList(), userDataToUpdate,
                                    userDataDict, userDataTypesDict, externalProviderName, userDataEntity
                                    );
                }
                else
                {
                    // expect this mean it is new "row"

                    dataEntity.User           = userEntity;
                    dataEntity.UserDataType   = userDataTypesDict[dataEntity.UserDataType.DataTypeValue];
                    dataEntity.ParentUserData = parentEntity;

                    dataEntity.LevelOfAssurance = levelOfAssuranceCache.GetByEnum(dataEntityModel.LevelOfAssuranceEnum);
                    dataEntity.DataSource       = dataEntityModel.UserData.DataSource ?? dataSource.Value;

                    userDataToUpdate.Add(dataEntity);

                    HydrateUserData(now,
                                    userEntity, dataEntity.ChildrenUserData?.Select(x => new UserDataLoAModel
                    {
                        UserData             = x,
                        LevelOfAssuranceEnum = dataEntityModel.LevelOfAssuranceEnum
                    }).ToList(), userDataToUpdate,
                                    userDataDict, userDataTypesDict, externalProviderName, dataEntity
                                    );
                }
            }
        }