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); }
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)); } }
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); }
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); }
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)); } }
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)); } }