示例#1
0
        public virtual bool SetAttributeValue(string attributeName, string value, AttributeCollection attributes)
        {
            bool flag;

            if (attributes != null)
            {
                if (!attributes.HasValue(attributeName))
                {
                    Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute attribute1 = new Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute();
                    attribute1.set_Value(value);
                    attribute1.set_Action(3);
                    Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute attribute = attribute1;
                    if (!attributes.IsIn(attributeName))
                    {
                        attributes.Add(attributeName, new List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute>()
                        {
                            attribute
                        });
                    }
                    else
                    {
                        attributes.get_AttributesCollection()[attributeName] = new List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute>()
                        {
                            attribute
                        };
                    }
                }
                else
                {
                    Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute attribute = this.GetAttributeValue(attributeName, attributes);
                    attribute.set_Value(value);
                    attribute.set_Action(3);
                }
                flag = true;
            }
            else
            {
                flag = false;
            }
            return(flag);
        }
        public void ProcessJob(TaskScheduling task)
        {
            List <User> ownerUsers = new List <User>();
            List <IdentityStoreObject> orphanGrps      = this.GetOrphanGroups(null);
            IStoreTypeHelper           storeHelper     = Helper.GetStoreTypeHelper(Helper.CurrentTask.get_IdentityStoreId());
            ILookup <string, User>     addOwnersLookup = null;
            List <string> supportedObjectTypes         = new List <string>();

            if (storeHelper != null)
            {
                supportedObjectTypes = storeHelper.GetSupportedObjectTypes(Helper.KnownProviderAttributes.get_Owner());
                if (supportedObjectTypes.Count > 0)
                {
                    List <string> strs1 = new List <string>();
                    orphanGrps.ForEach((IdentityStoreObject g) => {
                        List <string> strs = strs1;
                        List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> values = g.get_AttributesBusinessObject().GetValues("XAdditionalOwner");
                        Func <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute, string> u003cu003e9_12 = OrphanGroupProcessor.< > c.< > 9__1_2;
                        if (u003cu003e9_12 == null)
                        {
                            u003cu003e9_12 = (Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute o) => o.get_Value();
                            OrphanGroupProcessor.< > c.< > 9__1_2 = u003cu003e9_12;
                        }
                        strs.AddRange(values.Select <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute, string>(u003cu003e9_12));
                    });
                    ServicesUserServiceClient serviceUser = new ServicesUserServiceClient(false);
                    List <User> owners = serviceUser.Get(Helper.CurrentTask.get_IdentityStoreId(), strs1, new List <string>());
                    addOwnersLookup = owners.ToLookup <User, string>((User o) => o.get_ObjectIdFromIdentityStore(), StringComparer.OrdinalIgnoreCase);
                }
            }
            List <IdentityStoreObject> orphansList = new List <IdentityStoreObject>();

            foreach (IdentityStoreObject oGrp in orphanGrps)
            {
                if (oGrp.get_AttributesBusinessObject().IsIn(Helper.KnownProviderAttributes.get_Container()))
                {
                    oGrp.get_AttributesBusinessObject().Remove(Helper.KnownProviderAttributes.get_Container());
                }
                if (oGrp.get_AttributesBusinessObject().IsIn(Helper.KnownProviderAttributes.get_DisplayName()))
                {
                    oGrp.get_AttributesBusinessObject().Remove(Helper.KnownProviderAttributes.get_DisplayName());
                }
                if (oGrp.get_AttributesBusinessObject().IsIn(Helper.KnownProviderAttributes.get_DistinguishedName()))
                {
                    oGrp.get_AttributesBusinessObject().Remove(Helper.KnownProviderAttributes.get_DistinguishedName());
                }
                if (oGrp.get_AttributesBusinessObject().IsIn(Helper.KnownProviderAttributes.get_CommonName()))
                {
                    oGrp.get_AttributesBusinessObject().Remove(Helper.KnownProviderAttributes.get_CommonName());
                }
                Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute additionalOwner = this.GetAdditionalOwnerToPromote(oGrp.get_AttributesBusinessObject().GetValues("XAdditionalOwner"), addOwnersLookup, supportedObjectTypes);
                if (additionalOwner != null)
                {
                    ServicesUserServiceClient serviceUser = new ServicesUserServiceClient(false);
                    User additionaOwnerDN = serviceUser.Get(Helper.CurrentTask.get_IdentityStoreId(), additionalOwner.get_Value(), new List <string>()
                    {
                        Helper.KnownProviderAttributes.get_DistinguishedName(),
                        Helper.KnownProviderAttributes.get_EmailAddress(),
                        Helper.KnownProviderAttributes.get_DisplayName()
                    }, false);
                    if ((additionaOwnerDN == null ? false : additionaOwnerDN.get_AttributesBusinessObject().HasValue(Helper.KnownProviderAttributes.get_DistinguishedName())))
                    {
                        oGrp.set_ObjectName(additionalOwner.get_Value());
                        ownerUsers.Add(additionaOwnerDN);
                        additionaOwnerDN.set_ObjectIdFromIdentityStore(additionalOwner.get_Value());
                        additionalOwner.set_Action(2);
                        string dnValue = additionaOwnerDN.get_AttributesBusinessObject().get_AttributesCollection()[Helper.KnownProviderAttributes.get_DistinguishedName()][0].get_Value();
                        if (oGrp.get_AttributesBusinessObject().HasValue(Helper.KnownProviderAttributes.get_Owner()))
                        {
                            oGrp.get_AttributesBusinessObject().get_AttributesCollection()[Helper.KnownProviderAttributes.get_Owner()][0].set_Value(dnValue);
                            oGrp.get_AttributesBusinessObject().get_AttributesCollection()[Helper.KnownProviderAttributes.get_Owner()][0].set_Action(1);
                        }
                        else if (!oGrp.get_AttributesBusinessObject().IsIn(Helper.KnownProviderAttributes.get_Owner()))
                        {
                            Dictionary <string, List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> > attributesCollection = oGrp.get_AttributesBusinessObject().get_AttributesCollection();
                            string owner = Helper.KnownProviderAttributes.get_Owner();
                            List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> attributes = new List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute>();
                            Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute        attribute  = new Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute();
                            attribute.set_Action(1);
                            attribute.set_Value(dnValue);
                            attributes.Add(attribute);
                            attributesCollection.Add(owner, attributes);
                        }
                        else
                        {
                            Dictionary <string, List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> > attributesCollection1 = oGrp.get_AttributesBusinessObject().get_AttributesCollection();
                            string str = Helper.KnownProviderAttributes.get_Owner();
                            List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> attributes1 = new List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute>();
                            Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute        attribute1  = new Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute();
                            attribute1.set_Action(1);
                            attribute1.set_Value(dnValue);
                            attributes1.Add(attribute1);
                            attributesCollection1[str] = attributes1;
                        }
                        orphansList.Add(oGrp);
                    }
                }
            }
            if (orphansList.Count > 0)
            {
                ServicesGroupServiceClient groupServiceClient = new ServicesGroupServiceClient(false);
                string cData = DataCompressionHelper.CompressObjects <List <IdentityStoreObject> >(orphansList);
                if (groupServiceClient.UpdateManyWithCompression(Helper.CurrentTask.get_IdentityStoreId(), cData, typeof(IdentityStoreObject).FullName).get_Status() == 0)
                {
                    List <IdentityStoreObject> idObjectsList = Helper.PrepareCompressedData(orphansList);
                    groupServiceClient.SendOwnerUpdateNotification(Helper.CurrentTask.get_IdentityStoreId(), idObjectsList, ownerUsers);
                }
            }
        }
 private List <IdentityStoreObject> SetGroupUsage(List <IdentityStoreObject> providerResult, List <MessagingProviderLog> messagingProvidersLogs, DateTime?fromDate, DateTime toDate)
 {
     providerResult.ForEach((IdentityStoreObject x) => x.set_StopNotification(true));
     messagingProvidersLogs.ForEach((MessagingProviderLog messagingProviderLog) => {
         try
         {
             if ((messagingProviderLog == null ? false : messagingProviderLog.get_GroupsLog() != null))
             {
                 GroupsProcessor.logger.InfoFormat("Processing log of server {0} of groups {1}", messagingProviderLog.get_ServerIdentity(), messagingProviderLog.get_GroupsLog().Count.ToString());
                 messagingProviderLog.get_GroupsLog().ForEach((GroupUsage groupLog) => {
                     DateTime dateTime;
                     bool flag;
                     try
                     {
                         ILog log             = GroupsProcessor.logger;
                         string groupIdentity = groupLog.get_GroupIdentity();
                         int count            = groupLog.get_Usage().Count;
                         log.InfoFormat("Processing group {0} with usage found {1}", groupIdentity, count.ToString());
                         List <IdentityStoreObject> list = (
                             from x in providerResult
                             where (!x.get_AttributesBusinessObject().HasValue(Helper.KnownProviderAttributes.get_EmailAddress()) ? false : x.get_AttributesBusinessObject().get_AttributesCollection()[Helper.KnownProviderAttributes.get_EmailAddress()][0].get_Value().Equals(this.groupLog.get_GroupIdentity(), StringComparison.InvariantCultureIgnoreCase))
                             select x).ToList <IdentityStoreObject>();
                         if (list.Count <= 0)
                         {
                             GroupsProcessor.logger.InfoFormat("Group {0} not found in container", groupLog.get_GroupIdentity());
                         }
                         else
                         {
                             GroupsProcessor.logger.InfoFormat("Group {0} found in container, usage will be calculated and stamped", groupLog.get_GroupIdentity());
                             if ((!list[0].get_AttributesBusinessObject().HasValue("IMGUsedCount") ? false : list[0].get_AttributesBusinessObject().HasValue("IMGLastUsed")))
                             {
                                 groupLog.get_Usage().ForEach((DateTime useDate) => {
                                     int num;
                                     GroupsProcessor.logger.InfoFormat("Use date {0}", useDate.ToString());
                                     if (useDate > Convert.ToDateTime(list[0].get_AttributesBusinessObject().get_AttributesCollection()["IMGLastUsed"][0].get_Value()))
                                     {
                                         if (!fromDate.HasValue)
                                         {
                                             num = Convert.ToInt32(list[0].get_AttributesBusinessObject().get_AttributesCollection()["IMGUsedCount"][0].get_Value()) + 1;
                                             list[0].get_AttributesBusinessObject().get_AttributesCollection()["IMGUsedCount"][0].set_Value(num.ToString());
                                             list[0].set_StopNotification(false);
                                         }
                                         else if ((useDate <= fromDate.Value ? false : useDate < toDate))
                                         {
                                             num = Convert.ToInt32(list[0].get_AttributesBusinessObject().get_AttributesCollection()["IMGUsedCount"][0].get_Value()) + 1;
                                             list[0].get_AttributesBusinessObject().get_AttributesCollection()["IMGUsedCount"][0].set_Value(num.ToString());
                                             list[0].set_StopNotification(false);
                                         }
                                     }
                                 });
                             }
                             else if (list[0].get_AttributesBusinessObject().HasValue("IMGUsedCount"))
                             {
                                 Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute item = list[0].get_AttributesBusinessObject().get_AttributesCollection()["IMGUsedCount"][0];
                                 count = Convert.ToInt32(list[0].get_AttributesBusinessObject().get_AttributesCollection()["IMGUsedCount"][0].get_Value()) + groupLog.get_Usage().Count;
                                 item.set_Value(count.ToString());
                             }
                             else if (!list[0].get_AttributesBusinessObject().IsIn("IMGUsedCount"))
                             {
                                 Dictionary <string, List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> > attributesCollection = list[0].get_AttributesBusinessObject().get_AttributesCollection();
                                 List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> attributes = new List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute>();
                                 Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute attribute         = new Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute();
                                 attribute.set_Action(1);
                                 count = groupLog.get_Usage().Count;
                                 attribute.set_Value(count.ToString());
                                 attributes.Add(attribute);
                                 attributesCollection.Add("IMGUsedCount", attributes);
                                 list[0].set_StopNotification(false);
                             }
                             else
                             {
                                 List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> item1 = list[0].get_AttributesBusinessObject().get_AttributesCollection()["IMGUsedCount"];
                                 Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute attribute1   = new Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute();
                                 attribute1.set_Action(1);
                                 count = groupLog.get_Usage().Count;
                                 attribute1.set_Value(count.ToString());
                                 item1.Add(attribute1);
                             }
                             if (!list[0].get_AttributesBusinessObject().HasValue("IMGFirstUsed"))
                             {
                                 if (!list[0].get_AttributesBusinessObject().IsIn("IMGFirstUsed"))
                                 {
                                     Dictionary <string, List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> > strs = list[0].get_AttributesBusinessObject().get_AttributesCollection();
                                     List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> attributes1 = new List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute>();
                                     Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute attribute2         = new Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute();
                                     attribute2.set_Action(1);
                                     dateTime   = Convert.ToDateTime(groupLog.get_FirstUsed());
                                     string str = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                                     if (str == null)
                                     {
                                         dateTime = DateTime.Now;
                                         str      = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                                     }
                                     attribute2.set_Value(str);
                                     attributes1.Add(attribute2);
                                     strs.Add("IMGFirstUsed", attributes1);
                                 }
                                 else
                                 {
                                     List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> item2 = list[0].get_AttributesBusinessObject().get_AttributesCollection()["IMGFirstUsed"];
                                     Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute attribute3   = new Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute();
                                     attribute3.set_Action(1);
                                     dateTime    = Convert.ToDateTime(groupLog.get_FirstUsed());
                                     string str1 = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                                     if (str1 == null)
                                     {
                                         dateTime = DateTime.Now;
                                         str1     = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                                     }
                                     attribute3.set_Value(str1);
                                     item2.Add(attribute3);
                                 }
                                 list[0].set_StopNotification(false);
                             }
                             if (!list[0].get_AttributesBusinessObject().HasValue("IMGLastUsed"))
                             {
                                 flag = false;
                             }
                             else
                             {
                                 DateTime?lastUsed = groupLog.get_LastUsed();
                                 dateTime          = Convert.ToDateTime(list[0].get_AttributesBusinessObject().get_AttributesCollection()["IMGLastUsed"][0].get_Value());
                                 flag = (lastUsed.HasValue ? lastUsed.GetValueOrDefault() > dateTime : false);
                             }
                             if (flag)
                             {
                                 Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute item3 = list[0].get_AttributesBusinessObject().get_AttributesCollection()["IMGLastUsed"][0];
                                 dateTime    = Convert.ToDateTime(groupLog.get_LastUsed());
                                 string str2 = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                                 if (str2 == null)
                                 {
                                     dateTime = DateTime.Now;
                                     str2     = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                                 }
                                 item3.set_Value(str2);
                                 list[0].set_StopNotification(false);
                             }
                             else if (!list[0].get_AttributesBusinessObject().IsIn("IMGLastUsed"))
                             {
                                 Dictionary <string, List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> > attributesCollection1 = list[0].get_AttributesBusinessObject().get_AttributesCollection();
                                 List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> attributes2 = new List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute>();
                                 Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute attribute4         = new Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute();
                                 attribute4.set_Action(1);
                                 dateTime    = Convert.ToDateTime(groupLog.get_LastUsed());
                                 string str3 = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                                 if (str3 == null)
                                 {
                                     dateTime = DateTime.Now;
                                     str3     = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                                 }
                                 attribute4.set_Value(str3);
                                 attributes2.Add(attribute4);
                                 attributesCollection1.Add("IMGLastUsed", attributes2);
                                 list[0].set_StopNotification(false);
                             }
                             else
                             {
                                 List <Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute> attributes3 = list[0].get_AttributesBusinessObject().get_AttributesCollection()["IMGLastUsed"];
                                 Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute attribute5         = new Imanami.GroupID.DataTransferObjects.DataContracts.Services.Attribute();
                                 attribute5.set_Action(1);
                                 dateTime    = Convert.ToDateTime(groupLog.get_LastUsed());
                                 string str4 = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                                 if (str4 == null)
                                 {
                                     dateTime = DateTime.Now;
                                     str4     = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                                 }
                                 attribute5.set_Value(str4);
                                 attributes3.Add(attribute5);
                             }
                             GroupsProcessor.logger.InfoFormat("Use count {0}", list[0].get_AttributesBusinessObject().get_AttributesCollection()["IMGUsedCount"][0].get_Value());
                         }
                     }
                     catch (Exception exception)
                     {
                         GroupsProcessor.logger.ErrorFormat("Exception {0} :{1}", messagingProviderLog.get_ServerIdentity(), exception.Message);
                     }
                 });
             }
         }
         catch (Exception exception1)
         {
             GroupsProcessor.logger.ErrorFormat("Exception {0} :{1}", messagingProviderLog.get_ServerIdentity(), exception1.Message);
         }
     });
     return(providerResult);
 }