Exemple #1
0
        private void loadModules(string cat = "")
        {
            smallImages.Images.Clear();
            largeImages.Images.Clear();
            if (SynapseCore.Database.DBFunction.ConnectionName != "Default")
            {
                CurrentMode = SynapseModule.SynapseModuleMode.Development;
            }
            IList <SynapseModule> AllModules = SynapseModule.Load();

            lvModule.Items.Clear();
            lvModule.Groups.Clear();
            treeFavorites.Nodes.Clear();
            string[] SynapseDirs = new string[] { "ModulesIcons", "Prod", "Dev", "Resources", "AllSynapseResources" };
            foreach (DirectoryInfo dir in new DirectoryInfo(Application.StartupPath).GetDirectories("*", SearchOption.TopDirectoryOnly))
            {
                if (!SynapseDirs.Contains(dir.Name))
                {
                    dir.Delete(true);
                }
            }
            IEnumerable <SynapseModule> Modules;

            if (cat == "")
            {
                Modules = from x in FormUser.Modules where x.ID != 1 select x;
            }
            else
            {
                Modules = from x in FormUser.Modules where x.ID != 1 && x.MODULECATEGORY == cat select x;
            }

            //clean modules
            foreach (SynapseModule mod in (from m in AllModules where !FormUser.Modules.Select(mod => mod.ID).Contains(m.ID) select m))
            {
                mod.UnInstall(Application.StartupPath, CurrentMode);
            }

            foreach (SynapseModule module in Modules)
            {
                if (!module.is_uptodate(Application.StartupPath, CurrentMode))
                {
                    module.Update(Application.StartupPath, CurrentMode);
                }

                ListViewItem lvi = new ListViewItem();
                lvi.UseItemStyleForSubItems = false;
                lvi.Font      = new System.Drawing.Font(lvi.Font, FontStyle.Bold);
                lvi.ForeColor = Color.DarkBlue;
                lvi.Name      = module.TECHNICALNAME;
                lvi.Text      = module.FriendlyName.ToString();
                lvi.SubItems.Add(module.Description.ToString());
                lvi.SubItems.Add(module.VERSION);
                lvi.SubItems.Add(module.PATH);
                lvi.SubItems.Add(module.VERSIONDATE);

                lvi.Tag = module;

                ListViewGroup lgroup = new ListViewGroup(module.MODULECATEGORY, module.MODULECATEGORY);
                if (!lvModule.Groups.Contains(lgroup))
                {
                    lvModule.Groups.Add(lgroup);
                }
                lvi.Group = lvModule.Groups[module.MODULECATEGORY];

                string IconFile = Application.StartupPath + (CurrentMode == SynapseModule.SynapseModuleMode.Production?"\\Prod\\":"\\Dev\\") + module.TECHNICALNAME + "\\" + module.TECHNICALNAME + ".ico";

                Image img;
                if (File.Exists(IconFile))
                {
                    img = Image.FromFile(IconFile);
                }
                else
                {
                    img = Image.FromFile(Application.StartupPath + "\\ModulesIcons\\Default.png");
                }

                smallImages.Images.Add(module.TECHNICALNAME, img);
                largeImages.Images.Add(module.TECHNICALNAME, img);

                Bitmap bm = MakeGrayscale(new Bitmap(img));
                smallImages.Images.Add(module.TECHNICALNAME + "_INACTIVE", bm);
                largeImages.Images.Add(module.TECHNICALNAME + "_INACTIVE", bm);

                string Inactive = module.IS_ACTIVE ? "" : "_INACTIVE";
                lvi.ImageKey = module.TECHNICALNAME + Inactive;

                lvModule.Items.Add(lvi);
            }
        }
Exemple #2
0
        private void SecurizeForm(bool AddMenu)
        {
            bool   UserHaveAccess      = false;
            string UserID              = string.Empty;
            bool   ScanControl         = false;
            bool   ShowTestEnvironment = true;

            if (_allModules == null)
            {
                _allModules = SynapseModule.Load();
            }
            try
            {
                ShowTestEnvironment = bool.Parse(ConfigurationManager.AppSettings["ShowTestEnvironment"]);
            }
            // TODO: Replace by more specific exception
            catch (Exception)
            {
                // TODO: Log exception
            }

            if (System.ComponentModel.LicenseManager.UsageMode != System.ComponentModel.LicenseUsageMode.Designtime)
            {
                if (log4net.LogManager.GetRepository().Configured == false)
                {
                    XmlConfigurator.Configure();
                }

                if (_formUser == null)
                {
                    UserID   = WindowsIdentity.GetCurrent().Name;
                    FormUser = new SynapseCore.Security.User(UserID, this.ModuleID);
                }

                if (_language == null)
                {
                    string languageFilter = null;
                    try
                    {
                        languageFilter = ConfigurationManager.AppSettings["ModuleLanguages"];
                    }
                    catch
                    {
                        SynapseLogger.Debug("ModuleLanguage not defined in app.config");
                    }
                    if (languageFilter != null && languageFilter != string.Empty && languageFilter != "")
                    {
                        _language = SynapseLanguage.Load("where CODE in (" + languageFilter + ")");
                    }
                    else
                    {
                        _language = SynapseLanguage.Load();
                    }
                }

                SynapseLogger.Debug("ModuleLanguage not defined in app.config");
                if (Control.ModifierKeys == (Keys.Control | Keys.Shift) && FormUser.IsMemberOf("SYNAPSE_SECURITY_USER_IMPERSONATE"))
                {
                    frm_EnterUser UserDialog = new frm_EnterUser();
                    UserDialog.ShowDialog();
                    UserID = UserDialog.UserID;
                    if (UserID != string.Empty)
                    {
                        FormUser = new SynapseCore.Security.User(UserID, this.ModuleID);
                    }
                }

                SynapseLogger.Debug("Check key modifier");
                if (FormUser.UserCulture != string.Empty && FormUser.UserCulture != null)
                {
                    _CurrentLanguage.CULTURE = FormUser.UserCulture;
                }
                else
                {
                    _CurrentLanguage.CULTURE = Thread.CurrentThread.CurrentCulture.Name;
                }

                SynapseLogger.Debug("Set Current Language");
                foreach (SynapseLanguage lang in _language)
                {
                    if (lang.CULTURE == _CurrentLanguage.CULTURE)
                    {
                        _CurrentLanguage = lang;
                    }
                }

                SynapseLogger.Debug("Set Current Language Label");
                if (_CurrentLanguage.LABEL == null)
                {
                    _CurrentLanguage = _language[0];
                }

                Security.Tools.SetCulture(_CurrentLanguage.CULTURE);
                SynapseLogger.Debug("Configure Resource Manager");
                ConfigureResourceManager();

                SynapseLogger.Debug("Set Current Module access");
                if (FormUser != null)
                {
                    foreach (SynapseModule Module in _allModules) //FormUser.Modules
                    {
                        if (_CurrentSynapse == null && Module.ID == 1)
                        {
                            _CurrentSynapse = Module;
                        }
                        if (_CurrentModule == null && Module.ID == _ModuleID)
                        {
                            _CurrentModule = Module;
                        }
                    }
                    if (FormUser.Modules.Select(m => m.ID).Contains(_CurrentModule.ID))
                    {
                        UserHaveAccess = true;
                    }
                }

                SynapseLogger.Debug("Check Module Mode");
                if (CurrentModule.ID == 1)
                {
                    if (SynapseCore.Database.DBFunction.ConnectionName != "Default")
                    {
                        Mode = SynapseModule.SynapseModuleMode.Development;
                    }
                    else
                    {
                        Mode = SynapseModule.SynapseModuleMode.Production;
                    }
                }
                else
                {
                    Mode = Application.ExecutablePath.Contains("\\Dev\\") ? SynapseModule.SynapseModuleMode.Development : SynapseModule.SynapseModuleMode.Production;
                }

                //redify
                List <Control> menupoint = Controls.OfType <ToolStrip>().Cast <Control>().ToList();
                if (menupoint.Count > 0)
                {
                    foreach (Control Ctrl in menupoint)
                    {
                        if (SynapseCore.Database.DBFunction.FormBackColor != SystemColors.Control && ShowTestEnvironment)
                        {
                            ((ToolStrip)Ctrl).BackColor = SynapseCore.Database.DBFunction.FormBackColor;
                        }
                    }
                }
                //end refify

                SynapseLogger.Debug("Add Menu");
                if (this.ShowMenu && AddMenu)
                {
                    ConfigureMenu();
                }

                SynapseLogger.Debug("Language Message");
                string LangMessage = "en";
                try
                {
                    LangMessage = _CurrentLanguage.CULTURE.Substring(0, 2).ToUpper();
                }
                // TODO: Replace by more specific exception
                catch (Exception)
                {
                    SynapseLogger.Error("Unable to determine language of message");
                }

                SynapseLogger.Debug("Message No Access");
                if (!UserHaveAccess && ModuleID != 1)
                {
                    MessageBox.Show(Properties.Resources.ResourceManager.GetString(LangMessage + "_NoAccess"));
                    Application.Exit();
                }

                SynapseLogger.Debug("Message Not Active");
                if (!CurrentModule.IS_ACTIVE && Mode == SynapseModule.SynapseModuleMode.Production)
                {
                    MessageBox.Show("(" + Mode.ToString() + ") " + Properties.Resources.ResourceManager.GetString(LangMessage + "_Maintenance"));
                    Application.Exit();
                }

                SynapseLogger.Debug("Message Not Up To Date");
                if (!CurrentModule.is_uptodate(Application.StartupPath, Mode) && !System.Diagnostics.Debugger.IsAttached)
                {
                    try
                    {
                        MessageBox.Show(Properties.Resources.ResourceManager.GetString(LangMessage + "_UpdateNeeded"));
                        string file = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf(Mode == SynapseModule.SynapseModuleMode.Production ? "\\Prod\\" : "\\Dev\\")) + "\\Synapse.exe";
                        if (file != null)
                        {
                            SynapseCore.Controls.SynapseForm.SynapseLogger.Debug("starting " + file);
                            System.Diagnostics.Process proc = new System.Diagnostics.Process();
                            proc.EnableRaisingEvents        = false;
                            proc.StartInfo.WindowStyle      = System.Diagnostics.ProcessWindowStyle.Normal;
                            proc.StartInfo.FileName         = file;
                            proc.StartInfo.WorkingDirectory = Path.GetFullPath(file);
                            proc.StartInfo.Arguments        = Mode == SynapseModule.SynapseModuleMode.Production ? "" : "/con:ACC";
                            proc.Start();
                        }
                        else
                        {
                            SynapseCore.Controls.SynapseForm.SynapseLogger.Debug("Not exist " + file);
                        }
                        Application.Exit();
                    }
                    // TODO: Replace by more specific exception
                    catch (Exception)
                    {
                        if (!FormUser.IsMemberOf("SYNAPSE_SECURITY_ADMIN"))
                        {
                            MessageBox.Show("Application not in right location !");
                            Application.Exit();
                        }
                    }
                }

                SynapseLogger.Debug("Message Development");
                if (Mode == SynapseModule.SynapseModuleMode.Development && !DevACK)
                {
                    MessageBox.Show(Properties.Resources.ResourceManager.GetString(LangMessage + "_DevelopmentMode"));
                    DevACK = true;
                }
                try
                {
                    ScanControl = bool.Parse(ConfigurationManager.AppSettings["ScanControl"]);
                }
                // DONE: Replaced by more specific exception (see http://msdn.microsoft.com/en-us/library/vstudio/system.configuration.configurationmanager.appsettings(v=vs.90).aspx)
                catch (ConfigurationErrorsException)
                {
                    // TODO: Remove swallowing of Exception
                }

                if (UpdateControls && ModuleID != 0 && ScanControl)
                {
                    System.IO.TextWriter w = new System.IO.StreamWriter(Application.StartupPath + "\\" + this.Name + "_res.SynapseResource", false, System.Text.Encoding.Unicode);
                    w.Write(SynapseCore.Security.Tools.UpdateControlsInDB(this.Controls, this.ModuleID, null).ToString());

                    w.Flush();
                    w.Close();
                }

                SynapseLogger.Debug("Init Form");
                initForm(Security.Tools.SecureAndTranslateMode.Secure | Security.Tools.SecureAndTranslateMode.Transalte);
            }
        }