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