Пример #1
0
        internal static void UpdateNextSyncTime(int ldapId)
        {
            try
            {
                LdapSettings ldap = LdapSettings.Load(ldapId);
                if (ldap.Autosync)
                {
                    // Calculate next sync time
                    DateTime now = ldap.LastSynchronization;
                    if (now == DateTime.MinValue)
                    {
                        now = DateTime.UtcNow;
                    }

                    DateTime next = ldap.AutosyncStart;
                    while (next < now)
                    {
                        next = next.AddHours(ldap.AutosyncInterval);
                    }

                    // Add next sync time to schedule
                    Schedule.AddDateTypeValue(DateTypes.LdapSynchronization, ldapId, next);
                }
                else
                {
                    Schedule.DeleteDateTypeValue(DateTypes.LdapSynchronization, ldapId);
                }
            }
            catch (Exception ex)
            {
                Log.WriteError(ex.ToString());
            }
        }
Пример #2
0
        private void BindValues()
        {
            Mediachase.IBN.Business.LdapSettings lsets = Mediachase.IBN.Business.LdapSettings.Load(SetId);
            lblTitle.Text     = lsets.Title;
            lblDomain.Text    = lsets.Domain;
            lblFilter.Text    = lsets.Filter;
            lblUser.Text      = lsets.Username;
            lblIBN.Text       = lsets.IbnKey;
            lblLDAP.Text      = lsets.LdapKey;
            lblActivated.Text = String.Format("<img align='absmiddle' border='0' src='{1}' />&nbsp;{0}", LocRM.GetString("tActivate"),
                                              (lsets.Activate) ? ResolveUrl("~/layouts/images/accept_1.gif") : ResolveUrl("~/layouts/images/deny_1.gif"));
            lblDeactivated.Text = String.Format("<img align='absmiddle' border='0' src='{1}' />&nbsp;{0}", LocRM.GetString("tDeactivate"),
                                                (lsets.Deactivate) ? ResolveUrl("~/layouts/images/accept_1.gif") : ResolveUrl("~/layouts/images/deny_1.gif"));
            lblAutosinc.Text = String.Format("<img align='absmiddle' border='0' src='{1}' />&nbsp;{0}", LocRM.GetString("tAutosync"),
                                             (lsets.Autosync) ? ResolveUrl("~/layouts/images/accept_1.gif") : ResolveUrl("~/layouts/images/deny_1.gif"));
            lblLastSynch.Text = (lsets.LastSynchronization.Year > 1) ? Mediachase.IBN.Business.User.GetLocalDate(lsets.LastSynchronization).ToString("g") : "";
            if (lsets.Autosync)
            {
                lblStart.Text    = (lsets.AutosyncStart.Year > 1) ? Mediachase.IBN.Business.User.GetLocalDate(lsets.AutosyncStart).ToString("g") : "";
                lblInterval.Text = lsets.AutosyncInterval.ToString();
            }
            else
            {
                trAuto.Visible = false;
            }

            DataTable dt = GetDT(lsets.Fields);

            int i = 1;

            dgFields.Columns[i++].HeaderText = LocRM.GetString("tIsBitField");
            dgFields.Columns[i++].HeaderText = LocRM.GetString("tIBNName");
            dgFields.Columns[i++].HeaderText = LocRM.GetString("tLdapName");
            dgFields.Columns[i++].HeaderText = LocRM.GetString("tSettings");

            dgFields.DataSource = dt.DefaultView;
            dgFields.DataBind();

            foreach (DataGridItem dgi in dgFields.Items)
            {
                ImageButton ib = (ImageButton)dgi.FindControl("ibDelete");
                if (ib != null)
                {
                    ib.Attributes.Add("onclick", "return confirm('" + LocRM.GetString("DeleteWarning") + "')");
                }

                DropDownList ddIbnName = (DropDownList)dgi.FindControl("ddIbnName");
                if (ddIbnName != null)
                {
                    ddIbnName.DataSource = UserInfo.PropertyNamesIbnAll;
                    ddIbnName.DataBind();
                }
                DropDownList ddLdapName = (DropDownList)dgi.FindControl("ddLdapName");
                if (ddLdapName != null)
                {
                    ddLdapName.DataSource = UserInfo.PropertyNamesAdAll;
                    ddLdapName.DataBind();
                }
            }
        }
Пример #3
0
        private void dgFields_ItemCommand(object source, DataGridCommandEventArgs e)
        {
            if (e.CommandName == "NewField")
            {
                Mediachase.IBN.Business.LdapSettings lsets = Mediachase.IBN.Business.LdapSettings.Load(SetId);
                DataTable dt = GetDT(lsets.Fields);
                DataRow   dr = dt.NewRow();
                dr["FieldId"]   = -1;
                dr["IsBit"]     = false;
                dr["IbnName"]   = "Login";
                dr["LdapName"]  = "";
                dr["BitMask"]   = 0;
                dr["Equal"]     = false;
                dr["CompareTo"] = 0;
                dt.Rows.Add(dr);

                dgFields.EditItemIndex = dt.Rows.Count - 1;
                dgFields.DataKeyField  = "FieldId";
                dgFields.DataSource    = dt.DefaultView;
                dgFields.DataBind();

                foreach (DataGridItem dgi in dgFields.Items)
                {
                    ImageButton ib = (ImageButton)dgi.FindControl("ibDelete");
                    if (ib != null)
                    {
                        ib.Attributes.Add("onclick", "return confirm('" + LocRM.GetString("DeleteWarning") + "')");
                    }

                    DropDownList ddIbnName = (DropDownList)dgi.FindControl("ddIbnName");
                    if (ddIbnName != null)
                    {
                        ddIbnName.DataSource = UserInfo.PropertyNamesIbnAll;
                        ddIbnName.DataBind();
                    }

                    DropDownList ddLdapName = (DropDownList)dgi.FindControl("ddLdapName");
                    if (ddLdapName != null)
                    {
                        ddLdapName.DataSource = UserInfo.PropertyNamesAdAll;
                        ddLdapName.DataBind();
                        ddLdapName.Attributes.Add("onchange", "ChangeLdap(this)");

                        TextBox txtLdapName = (TextBox)dgi.FindControl("txtLdapName");
                        if (txtLdapName != null)
                        {
                            txtLdapName.Text = ddLdapName.SelectedValue;
                        }
                    }
                }
            }
        }
Пример #4
0
        public static LdapSettings Load(int ldapId)
        {
            Ldap.CheckAccess();

            LdapSettings ldap = null;

            using (IDataReader reader = DbLdap.SettingsGet(ldapId))
            {
                if (reader.Read())
                {
                    ldap = new LdapSettings();

                    ldap.LdapId              = ldapId;
                    ldap.Title               = reader["Title"].ToString();
                    ldap.Domain              = reader["Domain"].ToString();
                    ldap.Username            = reader["Username"].ToString();
                    ldap.Password            = reader["Password"].ToString();
                    ldap.Filter              = reader["Filter"].ToString();
                    ldap.IbnKey              = reader["IbnKey"].ToString();
                    ldap.LdapKey             = reader["LdapKey"].ToString();
                    ldap.Activate            = (bool)reader["Activate"];
                    ldap.Deactivate          = (bool)reader["Deactivate"];
                    ldap.Autosync            = (bool)reader["Autosync"];
                    ldap.AutosyncStart       = (DateTime)reader["AutosyncStart"];
                    ldap.AutosyncInterval    = (int)reader["AutosyncInterval"];
                    ldap.LastSynchronization = DBCommon.NullToDateTime(reader["LastSynchronization"]);
                }
            }

            if (ldap != null)
            {
                using (IDataReader reader = DbLdap.FieldsGet(ldapId))
                {
                    while (reader.Read())
                    {
                        LdapField field = new LdapField();
                        field.Load(reader);
                        ldap.Fields.Add(field);
                    }
                }
            }

            return(ldap);
        }
Пример #5
0
        private void BindValues()
        {
            ddIBNKey.DataSource = UserInfo.PropertyNamesIbnAll;
            ddIBNKey.DataBind();

            ddLdap.DataSource = UserInfo.PropertyNamesAdAll;
            ddLdap.DataBind();
            ddLdap.Attributes.Add("onchange", "ChangeLdap(this)");

            dtcStart.SelectedDate = Mediachase.IBN.Business.User.GetLocalDate(DateTime.UtcNow);
            Mediachase.IBN.Business.LdapSettings lsets = null;
            if (SetId > 0)
            {
                lsets          = Mediachase.IBN.Business.LdapSettings.Load(SetId);
                rfPass.Enabled = false;
            }
            else
            {
                lsets = new Mediachase.IBN.Business.LdapSettings();
                lsets.AutosyncStart = DateTime.UtcNow;
            }

            txtTitle.Text     = lsets.Title;
            txtDomain.Text    = lsets.Domain;
            txtUser.Text      = lsets.Username;
            txtPass.Text      = lsets.Password;
            ViewState["Pass"] = lsets.Password;
            txtFilter.Text    = lsets.Filter;
            Util.CommonHelper.SafeSelect(ddIBNKey, lsets.IbnKey);
            Util.CommonHelper.SafeSelect(ddLdap, lsets.LdapKey);
            txtLdap.Text          = lsets.LdapKey;
            txtInterval.Text      = lsets.AutosyncInterval.ToString();
            cbActivate.Checked    = lsets.Activate;
            cbDeactivate.Checked  = lsets.Deactivate;
            cbAutosync.Checked    = lsets.Autosync;
            dtcStart.SelectedDate = Mediachase.IBN.Business.User.GetLocalDate(lsets.AutosyncStart);
        }
Пример #6
0
        public static LdapSettings Load(int ldapId)
        {
            Ldap.CheckAccess();

            LdapSettings ldap = null;

            using(IDataReader reader = DbLdap.SettingsGet(ldapId))
            {
                if(reader.Read())
                {
                    ldap = new LdapSettings();

                    ldap.LdapId = ldapId;
                    ldap.Title = reader["Title"].ToString();
                    ldap.Domain = reader["Domain"].ToString();
                    ldap.Username = reader["Username"].ToString();
                    ldap.Password = reader["Password"].ToString();
                    ldap.Filter = reader["Filter"].ToString();
                    ldap.IbnKey = reader["IbnKey"].ToString();
                    ldap.LdapKey = reader["LdapKey"].ToString();
                    ldap.Activate = (bool)reader["Activate"];
                    ldap.Deactivate = (bool)reader["Deactivate"];
                    ldap.Autosync = (bool)reader["Autosync"];
                    ldap.AutosyncStart = (DateTime)reader["AutosyncStart"];
                    ldap.AutosyncInterval = (int)reader["AutosyncInterval"];
                    ldap.LastSynchronization = DBCommon.NullToDateTime(reader["LastSynchronization"]);
                }
            }

            if(ldap != null)
            {
                using(IDataReader reader = DbLdap.FieldsGet(ldapId))
                {
                    while(reader.Read())
                    {
                        LdapField field = new LdapField();
                        field.Load(reader);
                        ldap.Fields.Add(field);
                    }
                }
            }

            return ldap;
        }
Пример #7
0
        private void ShowStep(int step)
        {
            for (int i = 0; i <= _stepCount; i++)
                ((Panel)steps[i]).Visible = false;

            ((Panel)steps[step - 1]).Visible = true;

            #region Step 2
            if (step == 2)
            {
                if (rbSourceObject.SelectedValue == "0")
                {
                    lgdConnectInf.InnerText = LocRM.GetString("ConnectToAD");
                    tblADConnection.Visible = true;
                    tblFileConnection.Visible = false;
                    ChangedLdap();
                    tblFilter.Visible = true;
                }
                else
                {
                    lgdConnectInf.InnerText = LocRM.GetString("tLoadToServer");
                    tblADConnection.Visible = false;
                    tblFileConnection.Visible = true;
                    ((WizardTemplate)Page.Controls[0]).btnNext.Attributes.Add("onclick", "ShowProgress();");
                    tblFilter.Visible = false;
                }
                ViewState["Fields"] = null;
                ViewState["ADFields"] = null;
                ViewState["ldapPassword"] = null;
                grdFields.EditItemIndex = -1;
                tbFilter.Text = "";
                wwwPath.Value = "";

                ((WizardTemplate)Page.Controls[0]).btnNext.Disabled = false;
            }
            #endregion

            #region Step 3
            if (step == 3)
            {
                if (ViewState["Fields"] == null || ViewState["Fields"].ToString().Length == 0)
                {
                    DataTable dtFields = new DataTable();
                    dtFields.Columns.Add(new DataColumn("IBNField", typeof(string)));
                    dtFields.Columns.Add(new DataColumn("IBNFieldDisplay", typeof(string)));
                    dtFields.Columns.Add(new DataColumn("ADField", typeof(string)));
                    dtFields.Columns.Add(new DataColumn("realADField", typeof(string)));
                    DataRow dr1;
                    string[] sarray = null;
                    string[] alIBNFields = UserInfo.PropertyNamesIbn;
                    if (rbSourceObject.SelectedValue == "0")
                    {
                        pc["ADDomain"] = txtDomain.Text;
                        pc["ADUserName"] = txtUserName.Text;
                        pc["ADLDAPSettings"] = ddLDAPSettings.SelectedValue;

                        LdapSettings lsets = null;
                        if (int.Parse(ddLDAPSettings.SelectedValue) > 0)
                            lsets = LdapSettings.Load(int.Parse(ddLDAPSettings.SelectedValue));
                        else
                            lsets = new Mediachase.IBN.Business.LdapSettings();

                        string sPassword = txtPassword.Text;

                        if (txtDomain.Text == lsets.Domain && txtUserName.Text == lsets.Username && txtPassword.Text == "")
                            sPassword = lsets.Password;
                        ViewState["ldapPassword"] = sPassword;

                        ActiveDirectory ad = new ActiveDirectory(txtDomain.Text, txtUserName.Text, sPassword, tbFilter.Text);

                        tbFilter.Text = lsets.Filter;
                        foreach (string name in alIBNFields)
                        {
                            dr1 = dtFields.NewRow();
                            dr1["IBNField"] = name;
                            dr1["IBNFieldDisplay"] = Mediachase.Ibn.Web.UI.CHelper.GetResFileString(String.Format("{{IbnFramework.Common:{0}}}", name));
                            dr1["ADField"] = ad.FieldsMatch[name];
                            dr1["realADField"] = ad.FieldsMatch[name];
                            if (ddLDAPSettings.SelectedValue != "0")
                            {
                                foreach (LdapField lf in lsets.Fields)
                                    if (lf.IbnName == name)
                                    {
                                        dr1["ADField"] = lf.LdapName;
                                        dr1["realADField"] = lf.LdapName;
                                        break;
                                    }
                            }
                            dtFields.Rows.Add(dr1);
                        }
                        sarray = ad.GetProperties();
                    }
                    else
                    {
                        if (fSourceFile.PostedFile != null && fSourceFile.PostedFile.ContentLength > 0)
                        {
                            ProcessFileCache(Server.MapPath(CommonHelper.ChartPath));
                            String dir = CommonHelper.ChartPath;
                            string wwwpath = dir + Guid.NewGuid().ToString();
                            switch (rbSourceType.SelectedValue)
                            {
                                case "0":
                                    //wwwpath += ".xls";
                                    // OZ: Added XLS and XLSX extensions
                                    wwwpath += Path.GetExtension(fSourceFile.PostedFile.FileName);
                                    break;
                                case "1":
                                    wwwpath += ".xml";
                                    break;
                                default:
                                    break;
                            }
                            wwwPath.Value = wwwpath;
                            using (Stream sw = File.Create(Server.MapPath(wwwpath)))
                            {
                                fSourceFile.PostedFile.InputStream.Seek(0, SeekOrigin.Begin);
                                System.IO.BinaryReader br = new System.IO.BinaryReader(fSourceFile.PostedFile.InputStream);
                                int iBufferSize = 655360; // 640 KB
                                byte[] outbyte = br.ReadBytes(iBufferSize);

                                while (outbyte.Length > 0)
                                {
                                    sw.Write(outbyte, 0, outbyte.Length);
                                    outbyte = br.ReadBytes(iBufferSize);
                                }
                                br.Close();
                            }

                            IIncomingDataParser parser = null;
                            DataSet rawData = null;
                            switch (rbSourceType.SelectedIndex)
                            {
                                case 0:
                                    IMCOleDBHelper helper = (IMCOleDBHelper)Activator.GetObject(typeof(IMCOleDBHelper), System.Configuration.ConfigurationManager.AppSettings["McOleDbServiceString"]);
                                    rawData = helper.ConvertExcelToDataSet(Server.MapPath(wwwpath));

                                    break;
                                case 1:
                                    parser = new XmlIncomingDataParser();
                                    rawData = parser.Parse(Server.MapPath(wwwPath.Value), null);
                                    break;
                            }

                            DataTable dtSource = rawData.Tables[0];
                            int i = 0;
                            sarray = new string[dtSource.Columns.Count];
                            foreach (DataColumn dc in dtSource.Columns)
                            {
                                sarray[i++] = dc.ColumnName;
                            }

                            foreach (string name in alIBNFields)
                            {
                                dr1 = dtFields.NewRow();
                                dr1["IBNField"] = name;
                                dr1["IBNFieldDisplay"] = Mediachase.Ibn.Web.UI.CHelper.GetResFileString(String.Format("{{IbnFramework.Common:{0}}}", name));
                                dr1["ADField"] = LocRM.GetString("tNotSet");
                                dr1["realADField"] = "0";

                                foreach (string str in sarray)
                                    if (String.Compare(str, name, true) == 0 ||
                                        String.Compare(str, Mediachase.Ibn.Web.UI.CHelper.GetResFileString(String.Format("{{IbnFramework.Common:{0}}}", name)), true) == 0)
                                    {
                                        dr1["ADField"] = str;
                                        dr1["realADField"] = str;
                                    }
                                dtFields.Rows.Add(dr1);
                            }
                        }
                        else
                            ((WizardTemplate)Page.Controls[0]).btnNext.Disabled = true;
                    }

                    ViewState["Fields"] = dtFields;
                    grdFields.DataSource = dtFields.DefaultView;
                    grdFields.DataBind();

                    if (sarray != null)
                    {
                        string sValues = String.Join(",", sarray);
                        ViewState["ADFields"] = sValues;
                    }
                }
                else
                {
                    BindDG();
                }
                ViewState["Users"] = null;
                ViewState["FullUsers"] = null;
            }
            #endregion

            #region Step 4
            if (step == 4)
            {
                grdFields.EditItemIndex = -1;
                DataView dv = null;
                if (ViewState["FullUsers"] == null || ViewState["FullUsers"].ToString().Length == 0)
                {
                    string[] alIBNFields = UserInfo.PropertyNamesIbn;
                    DataTable dtFields = (DataTable)ViewState["Fields"];

                    DataTable dt = new DataTable();
                    dt.Columns.Add(new DataColumn("Add", typeof(bool)));
                    dt.Columns.Add(new DataColumn("Weight", typeof(int)));
                    dt.Columns.Add(new DataColumn("Login", typeof(string)));
                    dt.Columns.Add(new DataColumn("FirstName", typeof(string)));
                    dt.Columns.Add(new DataColumn("LastName", typeof(string)));
                    dt.Columns.Add(new DataColumn("Email", typeof(string)));
                    dt.Columns.Add(new DataColumn("Phone", typeof(string)));
                    dt.Columns.Add(new DataColumn("Fax", typeof(string)));
                    dt.Columns.Add(new DataColumn("Mobile", typeof(string)));
                    dt.Columns.Add(new DataColumn("Company", typeof(string)));
                    dt.Columns.Add(new DataColumn("JobTitle", typeof(string)));
                    dt.Columns.Add(new DataColumn("Department", typeof(string)));
                    dt.Columns.Add(new DataColumn("Location", typeof(string)));
                    dt.Columns.Add(new DataColumn("BadLogin", typeof(bool)));
                    dt.Columns.Add(new DataColumn("BadEmail", typeof(bool)));
                    //dt.Columns.Add(new DataColumn("BadWinLogin", typeof(bool)));
                    dt.Columns.Add(new DataColumn("IsBad", typeof(bool)));
                    dt.Columns.Add(new DataColumn("IsBadGroup", typeof(bool)));
                    dt.Columns.Add(new DataColumn("Groups", typeof(string)));
                    dt.Columns.Add(new DataColumn("IMGroup", typeof(int)));
                    dt.Columns.Add(new DataColumn("LdapUid", typeof(string)));
                    dt.Columns.Add(new DataColumn("WindowsLogin", typeof(string)));
                    DataRow dr;

                    if (rbSourceObject.SelectedValue == "0")
                    {
                        string sPassword = ViewState["ldapPassword"].ToString();

                        if (String.IsNullOrEmpty(sPassword) && int.Parse(ddLDAPSettings.SelectedValue) > 0)
                        {
                            LdapSettings lsets = LdapSettings.Load(int.Parse(ddLDAPSettings.SelectedValue));
                            if (txtDomain.Text == lsets.Domain && txtUserName.Text == lsets.Username && txtPassword.Text == "")
                                sPassword = lsets.Password;
                        }

                        ActiveDirectory ad = new ActiveDirectory(txtDomain.Text, txtUserName.Text, sPassword, tbFilter.Text);

                        foreach (string s in alIBNFields)
                        {
                            DataRow[] drMas = dtFields.Select("IBNField = '" + s + "'");
                            if (drMas.Length > 0)
                            {
                                string ss = drMas[0]["realADField"].ToString();
                                if (ss != "0" && !ss.Equals(ad.FieldsMatch[s]))
                                {
                                    ad.FieldsMatch[s] = ss;
                                }
                            }
                        }
                        ArrayList alUsers = ad.GetUsers();

                        foreach (UserInfo _ui in alUsers)
                        {
                            dr = dt.NewRow();
                            dr["Login"] = _ui.Login;
                            dr["FirstName"] = _ui.FirstName;
                            dr["LastName"] = _ui.LastName;
                            dr["Email"] = _ui.Email;
                            if (_ui.FirstName != "" && _ui.LastName != "" && _ui.Email != "")
                                dr["Add"] = true;
                            else
                                dr["Add"] = false;
                            if (_ui.FirstName != "" && _ui.LastName != "")
                                dr["Weight"] = 0;
                            else
                                dr["Weight"] = 1;
                            dr["Phone"] = _ui.Phone;
                            dr["Fax"] = _ui.Fax;
                            dr["Mobile"] = _ui.Mobile;
                            dr["Company"] = _ui.Company;
                            dr["JobTitle"] = _ui.JobTitle;
                            dr["Department"] = _ui.Department;
                            dr["Location"] = _ui.Location;
                            dr["BadLogin"] = false;
                            dr["BadEmail"] = false;
                            //dr["BadWinLogin"] = false;
                            dr["IsBad"] = false;
                            dr["IsBadGroup"] = false;
                            dr["Groups"] = ((int)InternalSecureGroups.ProjectManager).ToString() + ",";
                            dr["IMGroup"] = -1;
                            dr["LdapUid"] = _ui.LdapUid;
                            dr["WindowsLogin"] = _ui.WindowsLogin;
                            dt.Rows.Add(dr);
                        }
                    }
                    else
                    {
                        IIncomingDataParser parser = null;
                        DataSet rawData = null;
                        switch (rbSourceType.SelectedIndex)
                        {
                            case 0:
                                // [03.06.05] fix some problems with oledb and asp.net
                                IMCOleDBHelper helper = (IMCOleDBHelper)Activator.GetObject(typeof(IMCOleDBHelper), System.Configuration.ConfigurationManager.AppSettings["McOleDbServiceString"]);
                                rawData = helper.ConvertExcelToDataSet(Server.MapPath(wwwPath.Value));
                                break;
                            case 1:
                                parser = new XmlIncomingDataParser();
                                rawData = parser.Parse(Server.MapPath(wwwPath.Value), null);
                                break;
                        }

                        DataTable dtSource = rawData.Tables[0];

                        string sValues = ViewState["ADFields"].ToString();
                        ArrayList alADFields = new ArrayList(sValues.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries));
                        int count = 1;
                        foreach (DataRow drFile in dtSource.Rows)
                        {
                            dr = dt.NewRow();
                            dr["Add"] = true;
                            dr["Weight"] = 0;
                            dr["BadLogin"] = false;
                            dr["BadEmail"] = false;
                            //dr["BadWinLogin"] = false;
                            dr["IsBad"] = false;
                            dr["IsBadGroup"] = false;
                            dr["Groups"] = ((int)InternalSecureGroups.ProjectManager).ToString() + ",";
                            dr["IMGroup"] = -1;
                            bool flLogin = false;
                            foreach (string sname in alADFields)
                            {
                                DataRow[] drF = dtFields.Select("realADField = '" + sname + "'");
                                if (drF.Length > 0)
                                {
                                    string ss = drF[0]["IBNField"].ToString();
                                    if (ss == "Login")
                                        flLogin = true;
                                    dr[ss] = drFile[sname];
                                }
                            }
                            if (!flLogin)
                                dr["Login"] = "******" + (count++).ToString();
                            dt.Rows.Add(dr);
                        }
                    }

                    ViewState["Users"] = dt;
                    DataTable dtFull = dt.Clone();
                    DataRow drNew;
                    foreach (DataRow dr1 in dt.Rows)
                    {
                        drNew = dtFull.NewRow();
                        drNew.ItemArray = dr1.ItemArray;
                        dtFull.Rows.Add(drNew);
                    }
                    ViewState["FullUsers"] = dtFull;

                    dv = dt.DefaultView;
                }
                else
                    dv = ((DataTable)ViewState["FullUsers"]).DefaultView;

                dv.Sort = "Weight, LastName, FirstName, Login";
                dgUsers.DataSource = dv;
                dgUsers.DataBind();

                ((WizardTemplate)Page.Controls[0]).btnNext.CausesValidation = true;
                ((WizardTemplate)Page.Controls[0]).btnNext.Disabled = false;
            }
            #endregion

            #region Step 5
            if (step == 5)
            {
                DataTable dt = (DataTable)ViewState["Users"];
                DataTable dtFull = (DataTable)ViewState["FullUsers"];
                string sExceptions = "";
                foreach (DataGridItem item in dgUsers.Items)
                {
                    foreach (Control control in item.Cells[0].Controls)
                    {
                        if (control is HtmlInputCheckBox)
                        {
                            HtmlInputCheckBox checkBox = (HtmlInputCheckBox)control;
                            //*****Undo*****
                            //string filterElement = "Login = '******'";
                            try
                            {
                                //DataRow[] dr = dt.Select(filterElement);
                                //DataRow[] drF = dtFull.Select(filterElement);
                                DataRow dr = GetRowIsEqual(dt, "Login", item.Cells[3].Text);
                                DataRow drF = GetRowIsEqual(dtFull, "Login", item.Cells[3].Text);
                                if (!checkBox.Checked)
                                {
                                    //if (dr.Length > 0)
                                    //    dt.Rows.Remove(dr[0]);
                                    //if (drF.Length > 0)
                                    //    drF[0]["Add"] = false;
                                    if (dr != null)
                                        dt.Rows.Remove(dr);
                                    if (drF != null)
                                        drF["Add"] = false;
                                }
                                else
                                {
                                    //if (drF.Length > 0)
                                    //    drF[0]["Add"] = true;
                                    //if (dr.Length == 0 && drF.Length > 0)
                                    //{
                                    //    DataRow drN = dt.NewRow();
                                    //    drN.ItemArray = drF[0].ItemArray;
                                    //    dt.Rows.Add(drN);
                                    //}
                                    if (drF != null)
                                        drF["Add"] = true;
                                    if (dr == null && drF != null)
                                    {
                                        DataRow drN = dt.NewRow();
                                        drN.ItemArray = drF.ItemArray;
                                        dt.Rows.Add(drN);
                                    }
                                }
                            }
                            catch
                            {
                                sExceptions += item.Cells[3].Text + "\r\n";
                            }
                        }
                    }
                }

                foreach (DataRow bad in dt.Rows)
                {
                    string sEmail = bad["Email"].ToString();
                    if (sEmail.Length == 0 || User.GetUserByEmail(sEmail) != -1)
                        bad["BadEmail"] = true;
                    string sLogin = bad["Login"].ToString();
                    if (sLogin.Length == 0 || User.GetUserByLogin(sLogin) != -1)
                        bad["BadLogin"] = true;
                    //string sWinLogin = bad["WindowsLogin"].ToString();
                    //if (sWinLogin.Length == 0 || User.GetUserByWindowsLogin(sWinLogin) != -1)
                    //    bad["BadWinLogin"] = true;

                    if ((bool)bad["BadEmail"] || (bool)bad["BadLogin"]/* || (bool)bad["BadWinLogin"]*/)
                        bad["IsBad"] = true;
                }
                ViewState["Users"] = dt;
                ViewState["UsersGroups"] = null;
                ViewState["FullUsers"] = dtFull;
                if (!String.IsNullOrEmpty(sExceptions))
                    Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(),
                        String.Format("alert('Bad Logins:\r\n{0}');", sExceptions), true);

                DataView dv = dt.DefaultView;
                dv.Sort = "IsBad DESC, Login";

                dlUsers.DataSource = dv;
                dlUsers.DataBind();
                dlUsers.SelectedIndex = 0;
                LinkButton lb = (LinkButton)dlUsers.Items[0].FindControl("lbUser");
                if (lb != null)
                    BinddgGroupsUsers(lb.CommandName);

                ((WizardTemplate)Page.Controls[0]).btnNext.CausesValidation = false;
                ((WizardTemplate)Page.Controls[0]).btnNext.Disabled = false;
            }
            #endregion

            #region Step 6
            if (step == 6)
            {
                ddIMGroups.DataTextField = "IMGroupName";
                ddIMGroups.DataValueField = "IMGroupId";
                ddIMGroups.DataSource = IMGroup.GetListIMGroupsWithoutPartners();
                ddIMGroups.DataBind();

                DataTable dt = (DataTable)ViewState["Users"];
                DataTable dtFullOwn = dt.Clone();
                DataRow drNew;
                foreach (DataRow dr1 in dt.Rows)
                {
                    drNew = dtFullOwn.NewRow();
                    drNew.ItemArray = dr1.ItemArray;
                    dtFullOwn.Rows.Add(drNew);
                }
                foreach (DataRow bad in dtFullOwn.Rows)
                {
                    if ((bool)bad["IsBad"])
                    {
                        string sLogin = bad["Login"].ToString();
                        #region *****Undo*****
                        //DataRow[] dr = dt.Select("Login = '******'");
                        //if (dr.Length > 0)
                        //    dt.Rows.Remove(dr[0]);
                        #endregion
                        DataRow dr = GetRowIsEqual(dt, "Login", sLogin);
                        if (dr != null)
                            dt.Rows.Remove(dr);
                    }
                }

                foreach (DataRow dr1 in dt.Rows)
                {
                    dr1["IMGroup"] = int.Parse(ddIMGroups.SelectedValue);
                    if (dr1["Groups"].ToString().Length < 2)
                        dr1["IsBadGroup"] = true;
                }

                ViewState["UsersGroups"] = dt;

                DataView dv = dt.DefaultView;
                dv.Sort = "IsBadGroup DESC, LastName, FirstName";

                dlUserGroups.DataSource = dv;
                dlUserGroups.DataBind();
                if (dlUserGroups.Items.Count > 0)
                {
                    dlUserGroups.SelectedIndex = 0;
                    LinkButton lb = (LinkButton)dlUserGroups.Items[0].FindControl("lbUser2");
                    if (lb != null)
                        BindGroups(lb.CommandName, true);
                    btnSave2.Disabled = false;
                }
                else
                {
                    ((WizardTemplate)Page.Controls[0]).btnNext.Disabled = true;
                    btnSave2.Disabled = true;
                }
                ((WizardTemplate)Page.Controls[0]).btnNext.CausesValidation = false;
            }
            #endregion

            #region Step 7 - Save
            if (step == 7)
            {
                DataTable dt = (DataTable)ViewState["UsersGroups"];
                ArrayList alUsers = new ArrayList();
                foreach (DataRow saverow in dt.Rows)
                {
                    string sGroups = saverow["Groups"].ToString();
                    ArrayList alGroups = new ArrayList();
                    while (sGroups.Length > 0)
                    {
                        alGroups.Add(Int32.Parse(sGroups.Substring(0, sGroups.IndexOf(","))));
                        sGroups = sGroups.Remove(0, sGroups.IndexOf(",") + 1);
                    }
                    if (alGroups.Count > 0)
                    {
                        UserInfo _ui = new UserInfo();

                        _ui.Login = saverow["Login"].ToString();
                        _ui.FirstName = saverow["FirstName"].ToString();
                        _ui.LastName = saverow["LastName"].ToString();
                        _ui.Email = saverow["EMail"].ToString();
                        _ui.Phone = saverow["Phone"].ToString();
                        _ui.Fax = saverow["Fax"].ToString();
                        _ui.Mobile = saverow["Mobile"].ToString();
                        _ui.Company = saverow["Company"].ToString();
                        _ui.JobTitle = saverow["JobTitle"].ToString();
                        _ui.Department = saverow["Department"].ToString();
                        _ui.Location = saverow["Location"].ToString();
                        _ui.Groups = alGroups;
                        _ui.ImGroupId = int.Parse(saverow["IMGroup"].ToString());
                        _ui.WindowsLogin = saverow["WindowsLogin"].ToString();

                        alUsers.Add(_ui);
                    }
                }
                bool fl = false;
                if (alUsers.Count > 0)
                    try
                    {
                        string password = "******";
                        if (!String.IsNullOrEmpty(txtCommonPassword.Text.Trim()))
                            password = txtCommonPassword.Text.Trim();
                        User.CreateMultiple(alUsers, password, Security.CurrentUser.LanguageId);
                    }
                    catch
                    {
                        fl = true;
                    }
                else
                    fl = true;
                if (fl)
                    lblError.Text = LocRM.GetString("tWereErrors");
                else
                {
                    foreach (UserInfo _ui in alUsers)
                    {
                        lblError.Text += CommonHelper.GetUserStatusUL(User.GetUserByLogin(_ui.Login)) + "<br>";
                    }
                }
            }
            #endregion
        }
Пример #8
0
        public static int Synchronize(int LdapId)
        {
            Ldap.CheckAccess();

            LdapSettings ldap = LdapSettings.Load(LdapId);

            Hashtable users        = new Hashtable();
            ArrayList updatedUsers = new ArrayList();

            using (IDataReader reader = User.GetLdap())
            {
                while (reader.Read())
                {
                    UserInfo ui = new UserInfo();
                    ui.Load(reader);
                    users[ui[ldap.IbnKey]] = ui;
                }
            }

            if (users.Count > 0)
            {
                using (DirectoryEntry root = new DirectoryEntry(string.Format("LDAP://{0}", ldap.Domain), ldap.Username, ldap.Password))
                {
                    root.RefreshCache();
                    DirectorySearcher searcher = new DirectorySearcher(root, ldap.Filter);

                    foreach (SearchResult result in searcher.FindAll())
                    {
                        UserInfo ui = users[GetPropertyValue(result, ldap.LdapKey)] as UserInfo;
                        if (ui != null)
                        {
                            foreach (LdapField field in ldap.Fields)
                            {
                                string sVal = GetPropertyValue(result, field.LdapName);

                                if (field.BitField)
                                {
                                    if (sVal.Length < 1)
                                    {
                                        continue;
                                    }

                                    int iVal = int.Parse(sVal) & field.BitMask;
                                    if (field.Equal)
                                    {
                                        sVal = (iVal == field.CompareTo).ToString();
                                    }
                                    else
                                    {
                                        sVal = (iVal != field.CompareTo).ToString();
                                    }
                                }

                                if (field.IbnName == UserInfo.IbnProperty.WindowsLogin.ToString())
                                {
                                    sVal = string.Format("{0}\\{1}", ldap.Domain, sVal).ToLower();
                                }

                                if (ui[field.IbnName] != sVal && (sVal.Length > 0 || field.IbnName != UserInfo.IbnProperty.Email.ToString()))
                                {
                                    ui.UpdatedValues[field.IbnName] = sVal;

                                    if (!updatedUsers.Contains(ui))
                                    {
                                        updatedUsers.Add(ui);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            ldap.LastSynchronization = DateTime.UtcNow;
            DbLdap.SettingsUpdateLastSynchronization(ldap.LdapId, ldap.LastSynchronization);

            int logId;

            using (DbTransaction tran = DbTransaction.Begin())
            {
                logId = DbLdap.SyncLogCreate(ldap.LdapId, ldap.LastSynchronization, updatedUsers.Count);
                foreach (UserInfo ui in updatedUsers)
                {
                    bool wasActive = bool.Parse(ui.IsActive);

                    // Save changes to log
                    foreach (string name in UserInfo.PropertyNamesIbnAll)
                    {
                        string oldVal = ui[name];
                        string newVal = ui.UpdatedValues[name];
                        if (newVal != null || name == UserInfo.IbnProperty.FirstName.ToString() || name == UserInfo.IbnProperty.LastName.ToString())
                        {
                            if (newVal == null)
                            {
                                newVal = oldVal;
                            }

                            DbLdap.SyncFieldCreate(logId, ui.UserId, name, oldVal, newVal);
                        }

                        // Replace old values with new ones
                        if (newVal != null)
                        {
                            ui[name] = newVal;
                        }
                    }

                    try
                    {
                        // Update main database
                        DBUser.UpdateMain2(ui.OriginalId, ui.Login, ui.FirstName, ui.LastName, ui.Email);

                        // Update portal database
                        DBUser.Update(ui.UserId, ui.Login, ui.FirstName, ui.LastName, ui.Email, ui.WindowsLogin, ui.LdapUid);
                        DBUser.UpdateProfile(ui.UserId, ui.Phone, ui.Fax, ui.Mobile, ui.JobTitle, ui.Department, ui.Company, ui.Location);

                        // Update activity
                        bool isActive = bool.Parse(ui.IsActive);
                        if (isActive != wasActive && (ldap.Activate && isActive || ldap.Deactivate && !isActive))
                        {
                            User.UpdateActivity(ui.UserId, isActive);
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.WriteError(ex.ToString());
                    }
                }

                tran.Commit();
            }
            return(logId);
        }
Пример #9
0
        private void BindValues()
        {
            ddIBNKey.DataSource = UserInfo.PropertyNamesIbnAll;
            ddIBNKey.DataBind();

            ddLdap.DataSource = UserInfo.PropertyNamesAdAll;
            ddLdap.DataBind();
            ddLdap.Attributes.Add("onchange","ChangeLdap(this)");

            dtcStart.SelectedDate = Mediachase.IBN.Business.User.GetLocalDate(DateTime.UtcNow);
            Mediachase.IBN.Business.LdapSettings lsets = null;
            if(SetId>0)
            {
                lsets = Mediachase.IBN.Business.LdapSettings.Load(SetId);
                rfPass.Enabled = false;
            }
            else
            {
                lsets = new Mediachase.IBN.Business.LdapSettings();
                lsets.AutosyncStart = DateTime.UtcNow;
            }

            txtTitle.Text = lsets.Title;
            txtDomain.Text = lsets.Domain;
            txtUser.Text = lsets.Username;
            txtPass.Text = lsets.Password;
            ViewState["Pass"] = lsets.Password;
            txtFilter.Text = lsets.Filter;
            Util.CommonHelper.SafeSelect(ddIBNKey, lsets.IbnKey);
            Util.CommonHelper.SafeSelect(ddLdap, lsets.LdapKey);
            txtLdap.Text = lsets.LdapKey;
            txtInterval.Text = lsets.AutosyncInterval.ToString();
            cbActivate.Checked = lsets.Activate;
            cbDeactivate.Checked = lsets.Deactivate;
            cbAutosync.Checked = lsets.Autosync;
            dtcStart.SelectedDate = Mediachase.IBN.Business.User.GetLocalDate(lsets.AutosyncStart);
        }