public LanguageHandler GetLanguageHandler(string Language)
        {
            LanguageHandler LanguageHandlerInstance;

            Contract.Module Module = ModuleManager.Session.Modules.Where(M => M != null && M.LanguageHandler != null).Where(M => M.LanguageHandler != null && M.LanguageHandler.ID == Language).FirstOrDefault();

            if (Module == null)
            {
                return(null);
            }

            if (!LanguageHandlerInstances.ContainsKey(Module.ID))
            {
                LanguageHandlerInstance = Module.LanguageHandlerInstance;

                LanguageHandlerInstance.CoreModule    = Module;
                LanguageHandlerInstance.ModuleSession = this;

                LanguageHandlerInstances.Add(Module.ID, LanguageHandlerInstance);
            }
            else
            {
                LanguageHandlerInstance = LanguageHandlerInstances[Module.ID];
            }

            if (LanguageHandlerInstance == null)
            {
                throw new Exception("Language handler instance is null.");
            }

            return(LanguageHandlerInstance);
        }
        public CompilerErrorCollection TryCompileModule(dynamic moduleObject)
        {
            RequireSystemSigned();

            CompilerErrorCollection compilerErrors = new CompilerErrorCollection();

            Contract.Module module = ModuleManager.Session.Modules.Where(P => P.ID == moduleObject.ID).FirstOrDefault();

            if (module != null && !module.Locked)
            {
                module            = Contract.Module.FromString(module.ToString()); // Create a copy of the module
                module.References = ((ThirdParty.JsonArray)moduleObject.References).Select(r => (string)r).ToList();

                ModuleReversion moduleReversion = new ModuleReversion()
                {
                    Version = module.LatestReversion.Version + 1, Updated = DateTime.UtcNow, Classes = new List <ModuleClass>()
                };
                moduleReversion.Classes = ((ThirdParty.JsonArray)moduleObject.LatestReversion.Classes).Select(p => new ModuleClass()
                {
                    Name = ((dynamic)p).Name, Data = ((dynamic)p).Data
                }).ToList();

                module.LatestReversion = moduleReversion;
                module.CompileClasses(out compilerErrors, false);
            }
            else
            {
                compilerErrors.Add(new CompilerError("", 0, 0, "", "Module is locked."));
            }

            return(compilerErrors);
        }
        public CompilerErrorCollection UpdateModule(dynamic moduleObject)
        {
            RequireSystemSigned();

            CompilerErrorCollection compilerErrors = new CompilerErrorCollection();

            Contract.Module module = ModuleManager.Session.Modules.Where(P => P.ID == moduleObject.ID).FirstOrDefault();

            if (module == null)
            {
                module = new Contract.Module()
                {
                    ID         = moduleObject.ID,
                    References = ((ThirdParty.JsonArray)moduleObject.References).Select(r => (string)r).ToList(),
                };

                ModuleReversion moduleReversion = new ModuleReversion()
                {
                    Version = 1, Updated = DateTime.UtcNow, Classes = new List <ModuleClass>()
                };
                moduleReversion.Classes = ((ThirdParty.JsonArray)moduleObject.LatestReversion.Classes).Select(p => new ModuleClass()
                {
                    Name = ((dynamic)p).Name, Data = ((dynamic)p).Data
                }).ToList();

                module.LatestReversion = moduleReversion;
                ModuleManager.Session.AppendModuleReversion(module.ID, moduleReversion);

                ModuleManager.Session.Modules.Add(module);
                module.CompileClasses(out compilerErrors);
                module.Save();
            }
            else if (!module.Locked)
            {
                module.References = ((ThirdParty.JsonArray)moduleObject.References).Select(r => (string)r).ToList();
                ModuleReversion moduleReversion = new ModuleReversion()
                {
                    Version = module.LatestReversion.Version + 1, Updated = DateTime.UtcNow, Classes = new List <ModuleClass>()
                };
                moduleReversion.Classes = ((ThirdParty.JsonArray)moduleObject.LatestReversion.Classes).Select(p => new ModuleClass()
                {
                    Name = ((dynamic)p).Name, Data = ((dynamic)p).Data
                }).ToList();

                module.LatestReversion = moduleReversion;
                ModuleManager.Session.AppendModuleReversion(module.ID, moduleReversion);

                module.CompileClasses(out compilerErrors);
                module.Save();
            }
            else
            {
                compilerErrors.Add(new CompilerError("", 0, 0, "", "Module is locked"));
            }

            return(compilerErrors);
        }
Beispiel #4
0
 public MethodInfo[] GetInvokableMethods(string ID)
 {
     try
     {
         Contract.Module Module     = ModuleManager.Session.Modules.Where(M => M.ID == ID).FirstOrDefault();
         Type            ModuleType = Module.Type;
         return(ModuleType.GetMethods().Where(M => M.GetCustomAttribute <InvokableAttribute>() != null).ToArray());
     }
     catch { return(new MethodInfo[0]); }
 }
Beispiel #5
0
        public void Require(string ModuleID)
        {
            Contract.Module Module = ModuleManager.Session.GetModuleByID(ModuleID);

            if (Module == null)
            {
                throw new Exceptions.ModuleNotFoundException(ModuleID);
            }

            Parent.ModuleSession.GetInstance(Module);
        }
        internal void LoadModule(string path)
        {
            Contract.Module module = Contract.Module.FromString(File.ReadAllText(path));

            if (module != null)
            {
                if (module.VerifySignature())
                {
                    Modules.Add(module);
                }
            }
        }
Beispiel #7
0
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            Contract.Module Module = ModuleManager.Session.GetModuleByID(binder.Name);

            if (Module == null)
            {
                throw new Exceptions.ModuleNotFoundException(binder.Name);
            }

            result = Parent.ModuleSession.GetInstance(Module);
            return(true);
        }
        public static void UpdateModule(Contract.Module newModule)
        {
            Contract.Module oldModule = ModuleManager.GetModule(newModule.ID);

            if (oldModule != null)
            {
                ModuleManager.Session.Modules[ModuleManager.Session.Modules.IndexOf(oldModule)] = newModule;
            }
            else
            {
                ModuleManager.Session.Modules.Add(newModule);
            }
        }
        internal bool CompileModule(string path, out CompilerErrorCollection compilerErrorCollection)
        {
            Contract.Module module         = Contract.Module.FromString(File.ReadAllText(path));
            bool            compiledModule = module.CompileClasses(out compilerErrorCollection);

            Contract.Module oldModule = this.Modules.Where(p => p.ID == module.ID).FirstOrDefault();

            int moduleIndex = Modules.IndexOf(oldModule);

            if (moduleIndex != -1)
            {
                Modules[moduleIndex] = module;
            }
            else
            {
                Modules.Add(module);
            }

            return(compiledModule);
        }
        public bool DeleteModule(string ID)
        {
            RequireSystemSigned();

            Contract.Module Module = ModuleManager.Session.Modules.Where(M => M.ID == ID).FirstOrDefault();
            if (Module == null)
            {
                return(false);
            }

            ModuleManager.Session.Modules.Remove(Module);

            string FilePath = HttpContext.Current.Server.MapPath(SettingsManager.Session.GetSystemSetting("ModuleDirectory") + "/" + ID + ".bmf");

            if (File.Exists(FilePath))
            {
                File.Delete(FilePath);
            }

            return(true);
        }
        public dynamic GetModuleProperties(string moduleID)
        {
            RequireSystemSigned();

            Contract.Module module = ModuleManager.Session.Modules.Where(m => m.ID == moduleID).FirstOrDefault();

            if (module != null)
            {
                return new
                       {
                           ID              = module.ID,
                           Locked          = module.Locked,
                           Global          = module.Global,
                           References      = module.References,
                           LanguageHandler = module.LanguageHandler,
                           LatestReversion = module.LatestReversion
                       }
            }
            ;

            return(null);
        }
        internal BlazeSoft.Net.Web.Module GetInstance(Contract.Module Module)
        {
            BlazeSoft.Net.Web.Module ModuleInstance;

            if (!ModuleInstances.ContainsKey(Module.ID))
            {
                ModuleInstance = Module.Instance;

                ModuleInstance.CoreModule    = Module;
                ModuleInstance.ModuleSession = this;

                Debug.StartTimer("Module:" + Module.ID + ":Initialize()");
                ModuleInstance.Initialize();
                Debug.StopTimer("Module:" + Module.ID + ":Initialize()");

                ModuleInstances.Add(Module.ID, ModuleInstance);
            }
            else
            {
                ModuleInstance = ModuleInstances[Module.ID];
            }

            return(ModuleInstance);
        }
Beispiel #13
0
        public dynamic InvokeMethod(string ModuleID, string MethodName, params object[] Params)
        {
            Contract.Module Module = ModuleManager.Session.GetModuleByID(ModuleID);

            if (Module == null)
            {
                throw new Exceptions.ModuleNotFoundException(ModuleID);
            }

            dynamic ModuleInstance = Parent.ModuleSession.GetInstance(Module);
            Type    ModuleType     = ModuleInstance.GetType();

            var ParamTypes = from param in Params select param.GetType();

            MethodInfo Method = ModuleType.GetMethod(MethodName, ParamTypes.ToArray());

            if (Method == null)
            {
                throw new MissingMethodException(ModuleType.FullName, MethodName);
            }

            ObsoleteAttribute Obsolete = Method.GetCustomAttribute <ObsoleteAttribute>();

            if (Obsolete != null)
            {
                var ParamTypeNames = from param in Params select param.GetType().Name;

                if (Obsolete.IsError)
                {
                    throw new Exception("InvokeMethod(" + ModuleID + ") -> " + MethodName + "(" + string.Join(", ", ParamTypeNames) + ") is obsolete" + (Obsolete.Message != null ? ": '" + Obsolete.Message + "'" : ""));
                }
                else
                {
                    Debug.WriteLine("[Warning] InvokeMethod(" + ModuleID + ") -> " + MethodName + "(" + string.Join(", ", ParamTypeNames) + ") is obsolete" + (Obsolete.Message != null ? ": '" + Obsolete.Message + "'" : ""));
                }
            }

            string PublicKey = null;

            if (this.Parent is Page)
            {
                PublicKey = this.Parent.CorePage.PublicKey != null?Convert.ToBase64String(this.Parent.CorePage.PublicKey) : null;
            }
            else if (this.Parent is Contract.Module || this.Parent is LanguageHandler)
            {
                PublicKey = this.Parent.CoreModule.PublicKey != null?Convert.ToBase64String(this.Parent.CoreModule.PublicKey) : null;
            }

            InvokableAttribute Invokable = Method.GetCustomAttribute <InvokableAttribute>();

            if (Invokable == null)
            {
                throw new MissingMethodException(ModuleType.FullName, MethodName);
            }
            else
            {
                // if (Invokable.PublicKey != null && PublicKey != Invokable.PublicKey)
                //  throw new Exceptions.SignatureException();

                return(Method.Invoke(ModuleInstance, Params));
            }
        }