Esempio n. 1
0
        public async Task <ActionResult <IEnumerable <GroupDto> > > GetGroups(Guid userId)
        {
            var userExists = await _userRepository.UserExists(userId);

            if (!userExists)
            {
                return(NotFound());
            }

            var allGroupsFromRepo = await _groupRepository.GetGroups();

            var client = await MicrosoftGraphClient.GetGraphServiceClient();

            var userGroupsIdsFromAzureAd = await _azureAdRepository
                                           .GetUserGroupsIds(client, userId.ToString());

            var userGroupsFromAzureAd = new List <Group>();

            foreach (var groupId in userGroupsIdsFromAzureAd)
            {
                var group = await _azureAdRepository
                            .GetGroup(groupId.ToString());

                userGroupsFromAzureAd.Add(group);
            }

            var mergedGroups = DataMerger.MergeGroupsWithAzureData(allGroupsFromRepo,
                                                                   userGroupsFromAzureAd, _mapper);

            return(Ok(mergedGroups));
        }
        public async Task <ActionResult <List <String> > > GetUserGroups(string userId)
        {
            try
            {
                if (string.IsNullOrEmpty(userId) || string.IsNullOrWhiteSpace(userId))
                {
                    return(BadRequest());
                }

                // Initialize the GraphServiceClient.
                var client = await MicrosoftGraphClient.GetGraphServiceClient();

                // Load user profile.
                var userGroups = await _azureAdRepository.GetUserGroupsIds(client, userId);

                return(Ok(userGroups));
            }
            catch (ServiceException ex)
            {
                if (ex.StatusCode == HttpStatusCode.BadRequest)
                {
                    return(BadRequest());
                }
                else
                {
                    return(NotFound());
                }
            }
        }
Esempio n. 3
0
        public async Task <UserAccessDto> GetUserAccessStatus(SmartLockUserAccessDto smartLockUser)
        {
            var client = await MicrosoftGraphClient.GetGraphServiceClient();

            var smartLockUserExists =
                await _smartLockRepository.SmartLockUserExists(smartLockUser.SmartLockId, smartLockUser.UserId);

            if (smartLockUserExists)
            {
                var smartLock = await _smartLockRepository.GetSmartLock(smartLockUser.SmartLockId);

                if (smartLock.Status != Types.Status.Active)
                {
                    var inactiveLockAccess = new Access
                    {
                        UserId      = smartLockUser.UserId,
                        SmartLockId = smartLockUser.SmartLockId,
                        IsValid     = false,
                        Info        = "Lock was in inactive state"
                    };
                    _accessRepository.AddAccess(inactiveLockAccess);
                    await _accessRepository.Save();

                    return(new UserAccessDto
                    {
                        AccessAuthorized = false
                    });
                }
                var user = await _userRepository.GetUser(smartLockUser.UserId);

                if (user.Status != Types.Status.Active)
                {
                    var inactiveUserAccess = new Access
                    {
                        UserId      = smartLockUser.UserId,
                        SmartLockId = smartLockUser.SmartLockId,
                        IsValid     = false,
                        Info        = "User was in inactive state"
                    };
                    _accessRepository.AddAccess(inactiveUserAccess);
                    await _accessRepository.Save();

                    return(new UserAccessDto
                    {
                        AccessAuthorized = false
                    });
                }
                var validAccess = new Access
                {
                    UserId      = smartLockUser.UserId,
                    SmartLockId = smartLockUser.SmartLockId,
                    IsValid     = true,
                    Info        = "Access was permitted for user"
                };
                _accessRepository.AddAccess(validAccess);
                await _accessRepository.Save();

                return(new UserAccessDto
                {
                    AccessAuthorized = true
                });
            }

            var userGroupsIdsFromAzureAd = await _azureAdRepository
                                           .GetUserGroupsIds(client, smartLockUser.UserId.ToString());

            foreach (var groupId in userGroupsIdsFromAzureAd)
            {
                var smartLockGroupExists =
                    await _smartLockRepository.SmartLockGroupExists(smartLockUser.SmartLockId, Guid.Parse(groupId));

                if (smartLockGroupExists)
                {
                    var smartLock = await _smartLockRepository.GetSmartLock(smartLockUser.SmartLockId);

                    if (smartLock.Status != Types.Status.Active)
                    {
                        var inactiveLockAccess = new Access
                        {
                            UserId      = smartLockUser.UserId,
                            SmartLockId = smartLockUser.SmartLockId,
                            IsValid     = false,
                            Info        = "Lock was in inactive state"
                        };
                        _accessRepository.AddAccess(inactiveLockAccess);
                        await _accessRepository.Save();

                        return(new UserAccessDto
                        {
                            AccessAuthorized = false
                        });
                    }
                    var group = await _groupRepository.GetGroup(Guid.Parse(groupId));

                    if (group.Status != Status.Active)
                    {
                        var inactiveGroupAccess = new Access
                        {
                            UserId      = smartLockUser.UserId,
                            SmartLockId = smartLockUser.SmartLockId,
                            IsValid     = false,
                            Info        = "User group was in inactive state"
                        };
                        _accessRepository.AddAccess(inactiveGroupAccess);
                        await _accessRepository.Save();

                        return(new UserAccessDto
                        {
                            AccessAuthorized = false
                        });
                    }
                    var validGroupAccess = new Access
                    {
                        UserId      = smartLockUser.UserId,
                        SmartLockId = smartLockUser.SmartLockId,
                        IsValid     = true,
                        Info        = "Access is permitted for group user"
                    };
                    _accessRepository.AddAccess(validGroupAccess);
                    await _accessRepository.Save();

                    return(new UserAccessDto
                    {
                        AccessAuthorized = true
                    });
                }
            }

            var notValidAccess = new Access
            {
                UserId      = smartLockUser.UserId,
                SmartLockId = smartLockUser.SmartLockId,
                IsValid     = false,
                Info        = "Access was denied"
            };

            _accessRepository.AddAccess(notValidAccess);
            await _accessRepository.Save();

            return(new UserAccessDto
            {
                AccessAuthorized = false
            });
        }