/// <summary>
 ///     Initializes a new instance of the <see cref="AccessCheckService" /> class.
 /// </summary>
 /// <param name="bus">The bus.</param>
 /// <param name="accessPermissions">The access permissions.</param>
 public AccessCheckService(IBus bus, IAccessPermissionCollection accessPermissions)
 {
     Contract.Requires(bus != null);
     Contract.Requires(accessPermissions != null);
     _bus = bus;
     _accessPermissions = accessPermissions;
 }
        public async Task Update(IAccessPermissionCollection accessPermissions)
        {
            // NOTE: this is temporary quick solution
            // Normally it should be replaced with an implementation of partial updates based on MS Sync Framework
            var biometricInfo = await _listUsersBiometricRequest.Request(ListCommand.WithoutParameters);

            var biometricInfoMap            = biometricInfo.Users.ToDictionary(x => x.UserName);
            Func <string, UserHash> getHash = x =>
            {
                var hash = biometricInfoMap.ContainsKey(x) ? biometricInfoMap[x].BiometricHash : null;
                return(new UserHash(x, hash));
            };

            // add user permissions
            var accessRights = await _listAccessRightsRequest.Request(ListCommand.WithoutParameters);

            foreach (var userAccessRights in accessRights.UserAccessRights)
            {
                var userName = userAccessRights.UserName;
                var userHash = getHash(userName);

                userAccessRights.PermanentAccessRules.ForEach(
                    rule =>
                {
                    var permission = new PermanentUserAccess(rule.AccessPointId, userHash);
                    accessPermissions.AddOrUpdatePermission(permission);
                });

                userAccessRights.ScheduledAccessRules.ForEach(
                    rule =>
                {
                    var permission = new ScheduledUserAccess(rule.AccessPointId, userHash, WeeklySchedule.Convert(rule.WeeklySchedule));
                    accessPermissions.AddOrUpdatePermission(permission);
                });
            }

            // add user group permissions
            foreach (var groupRights in accessRights.UserGroupAccessRights)
            {
                var groupName          = groupRights.UserGroupName;
                var usersInGroupResult = await _listUsersInGroupRequest.Request(ListCommand.ListUsersInGroup(groupName));

                var userHashes = usersInGroupResult.Users.Select(x => getHash(x.UserName)).ToArray();

                groupRights.PermanentAccessRules.ForEach(
                    rule =>
                {
                    var permission = new PermanentGroupAccess(rule.AccessPointId, groupName, userHashes);
                    accessPermissions.AddOrUpdatePermission(permission);
                });

                groupRights.ScheduledAccessRules.ForEach(
                    rule =>
                {
                    var permission = new ScheduledGroupAccess(rule.AccessPointId, groupName, userHashes, WeeklySchedule.Convert(rule.WeeklySchedule));
                    accessPermissions.AddOrUpdatePermission(permission);
                });
            }
        }
예제 #3
0
        public EventConsumer(IAccessPermissionCollection accessPermissions, IAccessPermissionService service)
        {
            Contract.Requires(accessPermissions != null);
            Contract.Requires(service != null);

            _accessPermissions = accessPermissions;
            _service           = service;
        }
예제 #4
0
        public UpdateUserHashVisitor(IAccessPermissionCollection accessPermissions, string userName, string oldHash, string newHash)
        {
            Contract.Requires(accessPermissions != null);
            Contract.Requires(!string.IsNullOrWhiteSpace(userName));

            _accessPermissions = accessPermissions;
            _userName          = userName;
            _oldHash           = oldHash;
            _newHash           = newHash;
        }
 public void Save(IAccessPermissionCollection accessPermissions)
 {
     // NOTE: this is temporary quick solution
     // Normally permissions should be saved in protected storage, for instance in secured database or encrypted file
     try
     {
         var formatter = new BinaryFormatter();
         using (var stream = new FileStream(StorageFileName, FileMode.Create))
         {
             var array = accessPermissions.ToArray();
             formatter.Serialize(stream, array);
         }
     }
     catch (Exception e)
     {
         Log.Error("An error occurred while saving permissions to cache", e);
     }
 }
        public void Load(IAccessPermissionCollection accessPermissions)
        {
            if (!File.Exists(StorageFileName))
            {
                return;
            }

            // NOTE: this is temporary quick solution
            // Normally permissions should be saved in protected storage, for instance in secured database or encrypted file
            try
            {
                var formatter = new BinaryFormatter();
                using (var stream = new FileStream(StorageFileName, FileMode.Open))
                {
                    var deserialized = formatter.Deserialize(stream) as IAccessPermission[];
                    deserialized.ForEach(accessPermissions.AddOrUpdatePermission);
                }
            }
            catch (Exception e)
            {
                Log.Error("An error occurred while loading permissions from cache", e);
            }
        }
 public Task Update(IAccessPermissionCollection accessPermissions)
 {
     Contract.Requires(accessPermissions != null);
     Contract.Ensures(Contract.Result <Task>() != null);
     return(null);
 }
 public void Save(IAccessPermissionCollection accessPermissions)
 {
     Contract.Requires(accessPermissions != null);
 }