Ejemplo n.º 1
0
        private void InitializeEventListenerProcesser(IJobExecutionContext context)
        {
            if (eventListenerProcessor == null)
            {
                eventListenerProcessor = (EventListenerProcessor)context.JobDetail.JobDataMap[JOB_DATA_EVENT_LISTENER_PROCESSER];
            }

            if (eventListenerProcessor == null)
            {
                var attributeLoader = new ADAttributeLoader();
                var adUtils         = new ADUtils(attributeLoader);
                var eventEnricher   = new EventEnricher(attributeLoader, adUtils);
                var eventMapper     = new EventMapper();
                var eventBuilder    = new ADEventBuilder();
                var orgUnitDao      = new Organisation.SchedulingLayer.OrgUnitDao();
                var userDao         = new Organisation.SchedulingLayer.UserDao();
                var filter          = new Filter(adUtils);

                eventListenerProcessor = new EventListenerProcessor(eventEnricher, eventMapper, eventBuilder, orgUnitDao, userDao, filter, adUtils);

                context.JobDetail.JobDataMap.Put(JOB_DATA_EVENT_LISTENER_PROCESSER, eventListenerProcessor);
            }
        }
Ejemplo n.º 2
0
        // -----------------------------------------------------------------------------
        async Task DoUserStuff(ADX.DTO.ADEvent adEvent, CancellationToken cancellationToken)
        {
            try
            {
                string operation = null;

                switch (adEvent.ADEventType)
                {
                case ADX.DTO.ADEventType.Create:
                case ADX.DTO.ADEventType.Raw:
                    operation = "UPDATE";
                    break;

                case ADX.DTO.ADEventType.Ping:
                    operation = "UPDATE";
                    break;

                case ADX.DTO.ADEventType.Update:
                    operation = "UPDATE";
                    break;

                case ADX.DTO.ADEventType.Delete:
                    operation = "DELETE";
                    break;
                }

                if (operation != null)
                {
                    var userDTO = adEvent.GetADObject() as ADX.DTO.User;
                    if (userDTO != null)
                    {
                        var serverName = adEvent.Sender.ServerName;
                        var uuid       = userDTO.objectGuid.ToString().ToLower();

                        var user = _adObjectFactory.TryGetUser(userDTO.objectGuid, serverName);
                        if (user != null)
                        {
                            var sdb     = new SDBService(Configuration.GetValue <string>("SDBUrl"));
                            var stsUser = sdb.InspectUser(uuid, user.dn);
                            if (stsUser == null || stsUser._objectID.Equals(Guid.Empty))
                            {
                                throw new Exception("Could not find user in SDB: " + uuid);
                            }

                            // dirty hack to detect users moved outside "main ou hierarchy"
                            if (!stsUser.WithinScope)
                            {
                                operation = "DELETE";
                            }

                            Organisation.BusinessLayer.DTO.Registration.UserRegistration userReg = new Organisation.BusinessLayer.DTO.Registration.UserRegistration();
                            userReg.Person.Cpr  = stsUser.CPR;
                            userReg.Person.Name = stsUser.Name;
                            userReg.Timestamp   = DateTime.Now;
                            userReg.UserId      = stsUser.UserId;
                            userReg.ShortKey    = stsUser.UserShortKey;
                            userReg.Uuid        = uuid;

                            foreach (var address in stsUser.Addresses)
                            {
                                switch (address.Type)
                                {
                                case SDBServices.STS.DTO.AddressType.Email:
                                    userReg.Email = address._text;
                                    break;

                                case SDBServices.STS.DTO.AddressType.Telefon:
                                    userReg.PhoneNumber = address._text;
                                    break;

                                case SDBServices.STS.DTO.AddressType.Placering:
                                    userReg.Location = address._text;
                                    break;
                                }
                            }

                            if (stsUser.Position != null)
                            {
                                userReg.Positions.Add(new Organisation.BusinessLayer.DTO.Registration.Position()
                                {
                                    Name        = stsUser.Position._text,
                                    OrgUnitUuid = stsUser.Position.OUID.ToString().ToLower()
                                });
                            }

                            // not in SDB yet
                            userReg.RacfID = null;

                            var userDao = new Organisation.SchedulingLayer.UserDao();
                            userDao.Save(userReg, "DELETE".Equals(operation) ? Organisation.SchedulingLayer.OperationType.DELETE : Organisation.SchedulingLayer.OperationType.UPDATE, Configuration.GetValue <string>("Municipality"));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            await Task.Yield();
        }