Esempio n. 1
0
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            var loginBusinessModel = new LoginDataContract {
                Email = context.UserName, PasswordHash = context.Password
            };
            var user = await _loginBusiness.FindByUserNameorEmail(loginBusinessModel);

            if (user == null)
            {
                context.SetError("invalid_grant", "The user name or password is incorrect.");
                return;
            }
            loginBusinessModel.UserId = user.UserId;
            var roles = await _loginBusiness.GetRolesByUserId(loginBusinessModel);

            var identity = new ClaimsIdentity(context.Options.AuthenticationType);

            identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.UserId.ToString()));
            identity.AddClaim(new Claim(ClaimTypes.Name, user.UserName));
            foreach (var item in roles)
            {
                identity.AddClaim(new Claim(ClaimTypes.Role, item.Name));
            }

            context.Validated(identity);
        }
Esempio n. 2
0
        private void UpdateLogin(object parameter)
        {
            try
            {
                if (SelectedLogin == null)
                {
                    throw new Exception("Логин не выбран");
                }

                if (string.IsNullOrEmpty(Login.Trim()) || SelectedUser == null || SelectedGroup == null)
                {
                    throw new Exception("Не заполнены обязательные поля");
                }

                var passwordContainer = parameter as IPasswordContainer;

                if (!string.Equals(passwordContainer?.HashedPassword, Hasher.Hash(null)) &&
                    !string.Equals(passwordContainer?.HashedPassword, passwordContainer?.HashedElsePassword))
                {
                    throw new Exception("Пароли не совпадают");
                }

                using (var loginService = _ppsClientViewModel.ServiceProxy.GetPpsChannelFactory <ILoginService>())
                {
                    var channel      = loginService.CreateChannel();
                    var changedLogin = new LoginDataContract
                    {
                        LoginId  = SelectedLogin.LoginId,
                        Login    = Login.Trim(),
                        Password = SelectedLogin.Password,
                        GroupId  = SelectedGroup.GroupId,
                        UserId   = SelectedUser.UserId
                    };

                    if (!string.Equals(passwordContainer?.HashedPassword, Hasher.Hash(null)))
                    {
                        changedLogin.Password = passwordContainer?.HashedPassword;
                    }

                    var result = channel.UpdateLogin(SelectedLogin, changedLogin);

                    if (!result.BoolRes || !string.IsNullOrEmpty(result.ErrorRes))
                    {
                        throw new Exception(result.ErrorRes);
                    }

                    _ppsClientViewModel.UpdateLoginCollection();
                    _ppsClientViewModel.AddEvent(EventConstants.EVENT_UPD_LOGIN, SelectedLogin.Login);
                }
            }
            catch (Exception ex)
            {
                _ppsClientViewModel.WriteLogMessage(string.Concat("Не удалось изменить логин - ", ex.Message));
            }
        }
Esempio n. 3
0
        public async Task <List <RoleDataContract> > GetRolesByUserId(LoginDataContract loginDataContract)
        {
            var objUser = new Member {
                Id = loginDataContract.UserId
            };

            var userRole = await _loginRepository.GetRolesByUserId(objUser);

            var roleDataContract = userRole.Roles.Select(m => new RoleDataContract {
                Id = m.Id, Name = m.Name
            }).ToList();

            return(roleDataContract);
        }
Esempio n. 4
0
        public async Task <UserDataContract> FindByUserNameorEmail(LoginDataContract logindataContract)
        {
            var user = new Member
            {
                Email        = logindataContract.Email,
                PasswordHash = logindataContract.PasswordHash,
            };

            var userResult = await _loginRepository.FindByUserNameOrEmail(user);

            var userDataContract = new UserDataContract
            {
                UserId   = userResult.Id,
                UserName = userResult.UserName,
                Email    = userResult.Email
            };

            return(userDataContract);
        }
Esempio n. 5
0
        private void CheckPolicy(LoginDataContract selectedLogin, GroupDataContract selectedGroup)
        {
            try
            {
                UpdateSelectedPolicyCollection();

                if (PolicyCollection == null || !PolicyCollection.Any())
                {
                    return;
                }

                foreach (var selectedPolicy in PolicyCollection)
                {
                    selectedPolicy.IsSelected = selectedPolicy.IsGroupPolitics = false;
                }

                using (var policySetService =
                           _ppsClientViewModel.ServiceProxy.GetPpsChannelFactory <IPolicySetService>())
                {
                    var channel = policySetService.CreateChannel();
                    Result <PolicySetDataContract[]> result;

                    if (IsUserPolicySet && selectedLogin != null)
                    {
                        result = channel.GetPolicySetForLogin(selectedLogin.LoginId);
                    }
                    else if (IsGroupPolicySet && selectedGroup != null)
                    {
                        result = channel.GetPolicySetForGroup(selectedGroup.GroupId);
                    }
                    else
                    {
                        return;
                    }

                    if (result == null)
                    {
                        throw new Exception("Ошибка вызова службы");
                    }

                    if (!result.BoolRes || result.SomeResult == null)
                    {
                        throw new Exception(result.ErrorRes);
                    }

                    var policySetCollection = result.SomeResult;

                    foreach (var selectedPolicy in PolicyCollection)
                    {
                        var policySet = policySetCollection.FirstOrDefault(x => x.PolicyId == selectedPolicy.PolicyId);
                        selectedPolicy.IsSelected = policySet != null;

                        if (selectedPolicy.IsSelected && policySet != null)
                        {
                            selectedPolicy.PolicyParam = policySet.PolicyParam;
                        }
                    }

                    if (!IsUserPolicySet || _groupIdAndPolicyIdDct == null || !_groupIdAndPolicyIdDct.Any())
                    {
                        return;
                    }

                    var grpPoliciesForLogin = _groupIdAndPolicyIdDct[selectedLogin.GroupId];

                    if (grpPoliciesForLogin == null || !grpPoliciesForLogin.Any())
                    {
                        return;
                    }

                    foreach (var selectedPolicy in PolicyCollection)
                    {
                        selectedPolicy.IsGroupPolitics = grpPoliciesForLogin.Any(x => x == selectedPolicy.PolicyId);
                    }
                }
            }
            catch (Exception ex)
            {
                _ppsClientViewModel.WriteLogMessage(string.Concat("Не удалось отметить политику - ", ex.Message));
            }
        }
Esempio n. 6
0
        private void CheckDevice(LoginDataContract selectedLogin)
        {
            try
            {
                if (DeviceCollection == null || !DeviceCollection.Any())
                {
                    return;
                }

                foreach (var selectedDevice in DeviceCollection)
                {
                    selectedDevice.Selected = selectedDevice.DeviceTaken = false;
                }

                using (var policySetService =
                           _ppsClientViewModel.ServiceProxy.GetPpsChannelFactory <ILoginDevicesService>())
                {
                    var channel = policySetService.CreateChannel();

                    if (selectedLogin == null)
                    {
                        return;
                    }

                    var result = channel.GetLoginDevices(null);

                    if (result == null)
                    {
                        throw new Exception("Ошибка вызова службы");
                    }

                    if (!result.BoolRes || result.SomeResult == null)
                    {
                        throw new Exception(result.ErrorRes);
                    }

                    var selectedDevices = result.SomeResult.Where(x => x.LoginId == selectedLogin.LoginId);

                    foreach (var selectedDevice in DeviceCollection)
                    {
                        var findInLoginDevice = selectedDevices.FirstOrDefault(x => x.DeviceId == selectedDevice.DeviceId);
                        selectedDevice.Selected = findInLoginDevice != null;
                        var loginDevice = result.SomeResult.FirstOrDefault(x => x.DeviceId == selectedDevice.DeviceId);
                        selectedDevice.NeedUpdateDevice = loginDevice != null && findInLoginDevice != null &&
                                                          (findInLoginDevice.NeedUpdateDevice ?? false);
                    }

                    if (_loginIdAndDeviceIdDct == null || !_loginIdAndDeviceIdDct.Any())
                    {
                        return;
                    }

                    var devLst = new List <long>();

                    foreach (
                        var devId in
                        _loginIdAndDeviceIdDct.Where(x => x.Key != selectedLogin.LoginId)
                        .SelectMany(set => set.Value.Where(devId => !devLst.Contains(devId))))
                    {
                        devLst.Add(devId);
                    }

                    foreach (var selectedDevice in DeviceCollection)
                    {
                        selectedDevice.DeviceTaken       = devLst.Any(x => x == selectedDevice.DeviceId);
                        selectedDevice.OnDeviceSelected += selectedDevice_OnDeviceSelected;
                    }
                }
            }
            catch (Exception ex)
            {
                _ppsClientViewModel.WriteLogMessage(string.Concat("Не удалось выбрать устройства пользователя - ",
                                                                  ex.Message));
            }
        }