コード例 #1
0
        public async Task <HmrSystemUser> CreateUserAsync(UserCreateDto user, BceidAccount account)
        {
            var userEntity = new HmrSystemUser
            {
                Username          = account.Username.ToUpperInvariant(),
                UserGuid          = account.UserGuid,
                BusinessGuid      = account.BusinessGuid,
                BusinessLegalName = account.BusinessLegalName,
                UserType          = account.UserType,
                FirstName         = account.FirstName,
                LastName          = account.LastName,
                Email             = account.Email,
                EndDate           = user.EndDate,
                UserDirectory     = user.UserDirectory
            };

            if (account.UserType != UserTypeDto.INTERNAL)
            {
                var partyEntity = _partyRepo.GetPartyEntityByGuid(account.BusinessGuid);

                if (partyEntity == null)
                {
                    userEntity.Party = new HmrParty
                    {
                        BusinessGuid      = account.BusinessGuid,
                        BusinessLegalName = account.BusinessLegalName?.Trim(),
                        BusinessNumber    = account.BusinessNumber,
                        DisplayName       = account.DisplayName?.Trim()
                    };
                }
                else
                {
                    userEntity.PartyId = partyEntity.PartyId;
                }
            }

            foreach (var areaNumber in user.ServiceAreaNumbers)
            {
                userEntity.HmrServiceAreaUsers
                .Add(new HmrServiceAreaUser
                {
                    ServiceAreaNumber = areaNumber
                });
            }

            foreach (var roleId in user.UserRoleIds)
            {
                userEntity.HmrUserRoles
                .Add(new HmrUserRole
                {
                    RoleId = roleId
                });;
            }

            await DbSet.AddAsync(userEntity);

            return(userEntity);
        }
コード例 #2
0
        /// <summary>
        /// This method can be called concurrently by a typical client which asynchronously calls APIs
        /// In order to avoid unecessary multiple updates and the concurrency control number exception,
        /// it runs SQL with optimistic concurrency control.
        /// </summary>
        /// <param name="user"></param>
        /// <param name="concurrencyControlNumber"></param>
        /// <returns></returns>
        public async Task UpdateUserFromBceidAsync(BceidAccount user, long concurrencyControlNumber)
        {
            var sql = new StringBuilder("UPDATE HMR_SYSTEM_USER SET ");

            sql.Append("USERNAME = {0}, ");
            sql.Append("FIRST_NAME = {1}, ");
            sql.Append("LAST_NAME = {2}, ");
            sql.Append("EMAIL = {3}, ");
            sql.Append("CONCURRENCY_CONTROL_NUMBER = CONCURRENCY_CONTROL_NUMBER + 1 ");
            sql.Append("WHERE USER_GUID = {4} AND CONCURRENCY_CONTROL_NUMBER = {5} ");

            await DbContext.Database.ExecuteSqlRawAsync(sql.ToString(), user.Username, user.FirstName, user.LastName, user.Email, user.UserGuid, concurrencyControlNumber);
        }
コード例 #3
0
ファイル: BceidApi.cs プロジェクト: BcGovNeal/HMCR
        public async Task <(string Error, BceidAccount account)> GetBceidAccountAsync(string username, string userType)
        {
            var typeCode = userType.IsIdirUser() ? BCeIDAccountTypeCode.Internal : BCeIDAccountTypeCode.Business;

            var request = new AccountDetailRequest();

            request.requesterAccountTypeCode = typeCode;
            request.requesterUserId          = _client.ClientCredentials.UserName.UserName;
            request.accountTypeCode          = BCeIDAccountTypeCode.Business;
            request.userId          = username;
            request.onlineServiceId = _client.Osid;

            var response = await _client.getAccountDetailAsync(request);

            if (response.code != ResponseCode.Success)
            {
                return(response.message, null);
            }
            else if (response.failureCode == FailureCode.NoResults)
            {
                return("", null);
            }

            var account = new BceidAccount();

            account.Username = response.account.userId.value;
            account.UserGuid = new Guid(response.account.guid.value);
            account.UserType = userType;

            if (!account.UserType.IsBusinessUser())
            {
                account.BusinessGuid      = new Guid(response.account.business.guid.value);
                account.BusinessLegalName = response.account.business.legalName.value;
                account.BusinessNumber    = Convert.ToDecimal(response.account.business.businessNumber.value);
                account.DisplayName       = response.account.business.doingBusinessAs.value;
            }
            else
            {
                account.DisplayName = response.account.displayName.value;
            }

            account.FirstName = response.account.individualIdentity.name.firstname.value;
            account.LastName  = response.account.individualIdentity.name.surname.value;
            account.Email     = response.account.contact.email.value;

            return("", account);
        }
コード例 #4
0
        private async Task <(string error, BceidAccount account)> GetBceidAccountAsync(Guid?userGuid, string username, string userType, string requestorGuid, string requestorType)
        {
            var targetTypeCode    = userType.IsIdirUser() ? BCeIDAccountTypeCode.Internal : BCeIDAccountTypeCode.Business;
            var requesterTypeCode = requestorType.IsIdirUser() ? BCeIDAccountTypeCode.Internal : BCeIDAccountTypeCode.Business;

            var request = new AccountDetailRequest();

            request.requesterAccountTypeCode = requesterTypeCode;
            request.requesterUserGuid        = requestorGuid;
            request.accountTypeCode          = targetTypeCode;

            //ISA - for IDIR, only IDIR search is allowed
            if (userType.IsIdirUser())
            {
                request.userId = username;
            }
            else if (userGuid != null)
            {
                request.userGuid = userGuid?.ToString("N");
            }
            else
            {
                request.userId = username;
            }

            request.onlineServiceId = _client.Osid;

            var response = await _client.getAccountDetailAsync(request);

            if (response.code != ResponseCode.Success)
            {
                return(response.message, null);
            }
            else if (response.failureCode == FailureCode.NoResults)
            {
                return("", null);
            }

            var account = new BceidAccount();

            account.Username = response.account.userId.value;
            account.UserGuid = userGuid ?? new Guid(response.account.guid.value);
            account.UserType = userType;

            if (account.UserType.IsBusinessUser())
            {
                account.BusinessGuid      = new Guid(response.account.business.guid.value);
                account.BusinessLegalName = response.account.business.legalName.value;

                var doingBusinessAs = response.account.business.doingBusinessAs.value;
                account.DoingBusinessAs = doingBusinessAs.IsEmpty() ? account.BusinessLegalName : doingBusinessAs;

                var businessNumber = response.account.business.businessNumber.value;
                account.BusinessNumber = businessNumber.IsEmpty() ? 0 : Convert.ToDecimal(businessNumber);
            }

            account.DisplayName = response.account.displayName.value;
            account.FirstName   = response.account.individualIdentity.name.firstname.value;
            account.LastName    = response.account.individualIdentity.name.surname.value;
            account.Email       = response.account.contact.email.value;

            return("", account);
        }